2011-04-14 4 views
1

Je crée un petit programme multiplateforme avec C++/wxWidgets. En utilisant la liaison statique, j'ai réussi à obtenir un seul fichier .exe pour Windows à la fin. Cependant, il nécessite encore un petit (18 Ko) mingwm10.dllC++: Comment expédier un seul exécutable sans mingwm10.dll

Bien que je peux simplement distribuer mon application avec cette DLL, je préfère l'avoir "à l'intérieur" du fichier .exe ... Est-ce possible?

Merci

+0

duplication possible de [Manquant mingwm10.dll] (http://stackoverflow.com/questions/3396876/missing-mingwm10-dll) –

+0

Oui, j'ai vu cette question ... donc il n'y a aucun moyen de le faire. c'est triste parce que je pourrais le faire avec wxPython, l'interpréteur Python entier était dans un seul fichier .exe – Alex

+1

Recompilez wxWidgets, QT, ou quoi que ce soit sans la dépendance ... vous n'en avez probablement pas besoin. – AJG85

Répondre

1

Si vous utilisez le script configure pour compiler wxWidgets, ajoutez --disable-threads. Ceci mettra wxUSE_THREADS à 0, la classe wxThread et tout le code qui dépend des threads ne sera pas compilé. Automatiquement mingwm10.dll ne sera pas lié.

+0

Malheureusement, j'ai besoin de threads dans mon application ... – Alex

+0

MinGW a cette petite bibliothèque pour gérer les threads, car il a besoin DllMain() pour être averti de la fin du thread. Vous ne pouvez pas vous en débarrasser facilement. – marcin

0

Le « seul fichier exécutable qui inclut tous les fichiers de projet » est appelé un script d'installation. Considérez quelque chose comme InnoSetup, ou MSI. Rouler votre propre DLL d'installation sur le code de première utilisation est théoriquement possible, mais extrêmement moche. Il gome comme ceci: vous ajoutez la DLL (zippée, si possible) à l'EXE en tant que ressources. Au démarrage, vous essayez de charger la DLL; Si vous ne pouvez pas, vous le prenez à partir des ressources et placez quelque part. Et cela va casser sous l'utilisateur non-administrateur. Et l'escalade automatique des privilèges ne fonctionnera pas (cela fonctionne pour les fichiers d'installation). Et vous devez faire très attention à ne rien appeler dans la DLL avant de l'installer. Comme je l'ai dit, très, très laid.

Questions connexes