cs_TT22
Messages postés22Date d'inscriptionmercredi 4 avril 2012StatutMembreDernière intervention 9 février 2013
-
12 mai 2012 à 12:15
cs_TT22
Messages postés22Date d'inscriptionmercredi 4 avril 2012StatutMembreDernière intervention 9 février 2013
-
14 mai 2012 à 18:06
Salut,
Je suis entrain de faire un programme avec Visual C++ (2010), et mon problème est le suivant : Si je veux lancer mon script sur un autre ordinateur, il faut que les DLLs msvcp100d.dll et msvcr100d.dll soient présentes sur l'ordinateur concerné.
Je ne sais pas à quoi servent ces DLLs, ni d'où elle viennent.
Donc, ma question est la suivante : Comment pourrais-je faire pour que mon programme n'ai plus besoin de ces DLLs ?
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 14 mai 2012 à 15:28
Salut,
Je viens de jeter un coup d'oeil sur ton code. Ton exécutable dépendra de msvcr100d.dll car tu utilises les fonctions de la CRT comme malloc(), free(), strcpy() etc. Il dépendra de msvcp100d.dll car tu utilises par exemple la classe C++ std::string. Pour intégrer ces fonctions en statique à ton exécutable, vas dans les propriétés de ton projet, puis dans "Configuration Properties" choisis "C/C++" puis "Code Generation". Pour "Runtime Library" choisis "Multi-threaded (/MTd)". A noter que seules les fonctions des DLLs utilisées par ton code qui seront intégrées à ton exécutable. Comme remarqué par BruNews, il parait que tu compiles en Debug. Si tu comptes distribuer ton programme tu dois compiler en Release. Ainsi, ton exécutable sera beaucoup plus petit. Pour le mode Release, choisis "Multi-threaded (/MT)" pour "Runtime Library" dans les options de génération de code vues ci-dessus.
Pour rendre ton exécutable totalement indépendant de ces DLLs, tu dois opter pour la solution proposée par BruNews. Pour cela, tu ne dois pas utiliser les fonctions de la CRT, ni les fonctions C++ (comme new(), delete() ect) ni les classes de la STL. Pour la CRT, tu peux remplacer les fonctions par leurs équivalents en Win32 API. Par exemple, strcpy() par lstrcpy(), malloc() par HeapAlloc() etc.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 13 mai 2012 à 19:52
"un programme avec Visual C++"
Voila qui ne nous dit rien de ce que tu fais.
VC++ est un IDE qui permet d'y faire de l'interprété (tous langages .NET), du natif mais avec surcouches (C++ avec MFC), du C/C++ classique avec CRT, ...
On peut aussi décider qu'on codera tout soi meme (voir lien que je t'ai mis plus haut pour exemple).
Je sais pas trop ce qui appelle ces DLLs, ni comment les enlever.
Après, je préférerais qu'elles ne soient pas utilisées plutôt que de les inclure, parceque ça va augmenter la taille de mon programme (ce que je ne souhaite pas trop).