C++: Cara mengirimkan satu executable tanpa mingwm10.dll

Saya membuat program lintas platform kecil dengan C++/wxWidgets. Dengan menggunakan tautan statis saya hanya berhasil mendapatkan satu file .exe untuk Windows pada akhirnya. Namun masih membutuhkan mingwm10.dll kecil (18 KB).

Meskipun saya hanya dapat mendistribusikan aplikasi saya dengan dll ini, saya lebih suka menyimpannya "di dalam" .exe... Apakah mungkin?

Terima kasih


person Alex    schedule 14.04.2011    source sumber
comment
kemungkinan duplikat dari Mingwm10.dll yang hilang   -  person Nemanja Trifunovic    schedule 14.04.2011
comment
ya, saya melihat pertanyaan itu... jadi tidak ada cara untuk melakukan itu. itu menyedihkan karena saya bisa melakukannya dengan wxPython, seluruh penerjemah Python ada dalam satu file .exe   -  person Alex    schedule 14.04.2011
comment
Kompilasi ulang wxWidgets, QT, atau apa pun tanpa ketergantungan... Anda mungkin tidak memerlukannya.   -  person AJG85    schedule 14.04.2011
comment
Apakah ini akan berhasil: stackoverflow.com/questions/3396876/missing-mingwm10 -dll/   -  person Nemanja Trifunovic    schedule 14.04.2011


Jawaban (2)


Jika Anda menggunakan skrip konfigurasi untuk mengkompilasi wxWidgets, tambahkan --disable-threads. Ini akan menyetel wxUSE_THREADS ke 0, kelas wxThread dan semua kode yang bergantung pada utas tidak akan dikompilasi. Secara otomatis mingwm10.dll tidak akan ditautkan.

person marcin    schedule 17.04.2011
comment
MinGW memiliki perpustakaan kecil untuk menangani thread karena memerlukan DllMain() untuk mendapatkan pemberitahuan tentang penghentian thread. Anda tidak dapat dengan mudah menghilangkannya. - person marcin; 03.05.2011

"EXE tunggal yang mencakup semua file proyek" disebut skrip pengaturan. Pertimbangkan sesuatu seperti InnoSetup, atau MSI.

Menggulirkan DLL instalasi Anda sendiri pada kode penggunaan pertama secara teori mungkin dilakukan, tetapi sangat jelek. Bunyinya seperti ini: Anda menambahkan DLL (yang di-zip, jika memungkinkan) ke EXE sebagai sumber daya. Saat startup, Anda mencoba memuat DLL; jika tidak bisa, ambil dari sumber daya dan letakkan di suatu tempat. Dan itu akan rusak di bawah pengguna non-admin. Dan eskalasi hak istimewa otomatis tidak akan berfungsi (ini berfungsi untuk file setup). Dan Anda harus sangat berhati-hati untuk tidak memanggil apa pun di DLL sebelum Anda menginstalnya. Seperti yang saya katakan, sangat, sangat jelek.

person Seva Alekseyev    schedule 14.04.2011