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.
* 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. –
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". –
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. –