2016-11-07 1 views
0

MSVC++ fournit une optimisation pour les programmeurs qui souhaitent déployer un seul fichier exécutable. Vous pouvez construire avec/MT pour lier la bibliothèque d'exécution C++ et la bibliothèque C++ standard dans l'EXE; ou/MD pour appeler les bibliothèques d'exécution C++ (fichiers .DLL).Comment déployer un seul fichier exécutable

Mais pour votre propre code ou DLLs tiers, est-il possible de générer un seul fichier exécutable?

projet Suppose PrjA utilise PrjB; maintenant, PrjB génère seule bibliothèque dynamique PrjB.dll, non bibliothèque statique PrjB.lib. Il y a moyen de les configurer afin que PrjA pourrait générer PrjA.exe, qui PrjB.dll intégré à l'intérieur, de sorte que doit être déployé seulement 1 fichier?

Remarque: la contrainte est que seulement PrjB.DLL est fourni, pas de bibliothèque statique prjB.LIB. Cette question est différente de C++ How to compile dll in a .exe.

MSVC /MD, /MT config using C++ Runtime Library:

  • /MD Causes l'application à utiliser la version spécifique multithread et spécifique DLL de la bibliothèque d'exécution.

  • /MT Oblige l'application à utiliser la version statique multithread de la bibliothèque d'exécution.

+0

* Y a-t-il un moyen de les configurer pour obtenir un effet similaire à celui de/MD,/MDd,/MT,/MTd? * Veuillez élaborer. Ce n'est pas clair pour moi ce que vous n'avez pas compris après avoir lu la documentation de ces drapeaux. –

+0

On dirait que la question est "comment relier statiquement tous mes projets en un seul exécutable". Aucune idée de ce que les paramètres de la bibliothèque d'exécution ont à faire avec cela, mais pour lier vos projets statiquement, vous devez changer le type de vos projets de "bibliothèque dynamique" à "bibliothèque statique". –

+0

Eh bien, faites que ProjB génère .lib alors./MD// Les commutateurs MT ne font pas entrer les fichiers .dll dans .exe, ils ne font que choisir entre 2 versions de la même bibliothèque - une compilée en .dll et une compilée en .lib. Si vous ne pouvez vraiment pas faire de .lib et que vous avez vraiment besoin de .exe, alors il y a des outils qui peuvent "regrouper" l'application en un exe post factum - voir autre question pour plus de détails. –

Répondre

0

Comme mentionné sur plusieurs autres SOanswers, il existe des outils externes disponibles pour cette tâche. BoxedApp est hautement considéré parmi eux (mais payé).