[Visual C++ 2003] Generer un exe qui ne depend pas de msvcp71.dll ?

Generer un exe qui ne depend pas de msvcp71.dll ? [Visual C++ 2003] - C++ - Programmation

Marsh Posté le 12-11-2004 à 10:42:30    

J'utilise Visual C++ 2003 (nomme aussi VC7.1 ou encore .NET) et la librairie graphique Qt 3.3.3.
Malheureusement l'executable genere depend des dll suivantes:
msvcp71.dll, msvcp71d.dll, msvcr71.dll, msvcr71d.dll
 
Y'aurait-il un moyen de generer un executable qui ne depende pas des ces .dll ?
Visual C++ 6 n'a pas cette dependance, peut-on compiler en mode VC6 sous VC7 ?

Reply

Marsh Posté le 12-11-2004 à 10:42:30   

Reply

Marsh Posté le 12-11-2004 à 10:47:17    

C'est innovant ça, un exe qui dépend des lib débug et release en même temps...
 
Visual Studio 6 avait déjà une dépendance sur MSVCRT6.DLL. Tu ne la voyait pas parce qu'elle était installée sur tous les PC du monde et même d'ailleurs. Tout comme tes DLLs seront installées automatiquement sur Windows 2003 (je crois)...
 
Pour te débarasser de tout ça, vérifie que tu ne fais pas de Managed C++ (qui a besoin de .NET pour fonctionner), et que tu utilises un Run-time statically linked (ça doit être dans les options C++/Code Generation, mais je n'en suis pas sûr).  

Reply

Marsh Posté le 12-11-2004 à 10:52:37    

J'utilise moi-même Qt 3.3.3 compilé avec VC++ 7.1. En fait, j'utilise les runtime libraries multithreaded static (flag -MT).  
Pour que cela fonctionne, il faut aussi recompiler Qt après avoir changé le fichier
<QTDIR>\mkspecs\win32-msvc.net\qmake.conf (Il faut remplacer MD par MT).
 
Avec ça, ça marche très bien chez moi.

Reply

Marsh Posté le 12-11-2004 à 11:55:45    

> C'est innovant ça, un exe qui dépend des lib débug et release en même temps...
 
En fait la c'etait un probleme homme plutot que machine :)
J'avais pas indique a Qt (dans mon .pro) de compiler en mode release. Maintenant je ne depend que de msvcp71.dll et msvcr71.dll. Y'aurait pas moyen de dependre de msvcp6.dll plutot ?
 
> j'utilise les runtime libraries multithreaded static (flag -MT)
 
Si j'ai bien compris, dans ce cas msvcp71.dll et msvcr71.dll ne disparaissent pas, c'est juste inclus dans le binaire final au lieu d'avoir des .dll separees ?
 
Moi ce que je veux obtenir c'est un installateur plus petit pour mon application. Les 2 dll de VC7 prennent 840ko.
 
Certain me diront, pourquoi ne pas utiliser Visual C++ 6 au lieu de VC7 ? C'est simple le compilo de VC6 est une grosse louse niveau C++ pour rester poli.

Reply

Marsh Posté le 12-11-2004 à 14:02:52    

Utilise la version récente de la lib standard. msvcp71.dll et msvcr71.dll c'est très bien. msvcrt (de VC++ 6) est une known dll, c.a.d placée dans system32 et installée sur tous les postes. Oui mais y'en a XX versions qui se balladent (13 recencées je crois), ça cause des pblm, c'est le "dll hell".
Ce qu'il faut c'est mettre tes 2 dll au même endroit que ton exe. Si en plsu tu as fait un installeur, je vois pas où est le problème à avoir ces 2 dll. Si ça te gêne il faut compiler en static, et comme tu dis c'est comme si tes 2 dll se retrouvaient incluses dans l'exe.
Mais attention la dll Qt utilise aussi ces dll. Donc il faut aussi compiler et lier Qt en static, ce qui rallonge le temps d'édition des liens.
840 Ko face aux 5Mo de Qt, c'est rien du tout.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 12-11-2004 à 17:57:16    

HelloWorld a écrit :


Ce qu'il faut c'est mettre tes 2 dll au même endroit que ton exe. Si en plus tu as fait un installeur, je vois pas où est le problème à avoir ces 2 dll.


 
Merci a tous, je vais donc continuer comme je faisais avant. C'est a dire exactement comme tu viens de le decrire. Mon installeur (NSIS) fait 2.5Mo et j'avais voulu le reduire un peu plus. Je posais toutes ces questions car VC c'est pas le truc que je connais le plus: ca fait bizarre pour un linuxien de devoir inclure dans l'installation du soft les libs C et C++ !
 
Je me pose la question: tout le monde fait ca sous Windows ? toutes les applications s'amusent a inclure les dll msvcp et msvcr ?

Reply

Marsh Posté le 12-11-2004 à 18:31:27    

tanguy a écrit :

Je me pose la question: tout le monde fait ca sous Windows ? toutes les applications s'amusent a inclure les dll msvcp et msvcr ?


Une application bien faite le fait oui. Tout ce qu'elle utilise elle le fourni. Y'a pas de miracle : soit tu le fais, soit c'est à l'utilisateur de se le récupérer et de se l'installer. Généralement sous Linux on dit à l'utilisateur de se le faire, sous Windows on fournit tout clé en main. Je vois mal une application dire à une secrétaire "Il vous faut la CRT de VC++ 7.1"...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 12-11-2004 à 19:57:44    

HelloWorld a écrit :

Je vois mal une application dire à une secrétaire "Il vous faut la CRT de VC++ 7.1"...


 
Et celle de VC++ 6.0 pour QT 3.2 et celle de VC++ 5.0 pour la libjpeg 2.6.
 
Franchement, c'était un des aspects les plus répugnants de linux que cette incompatibilité entre version de libs standard C et C++. Heureusement que c'est stabilisé de nos jours...
 
Pour revenir à Windows, il est bon de savoir que pour tous les "gros" déploiements, on teste souvent les installs de softs sur des PC nus (donc fraichement installés ou ghostés), pour être sûr que toutes les DLL sont incluses (en particulier les trucs cons comme COMCTL32 et autres, qui parfois ne sont pas déjà présent en version correcte).  
 

Reply

Marsh Posté le 12-11-2004 à 20:55:08    

Pour les grosses applis y'a des mecs pour qui le seul boulot c'est de s'occuper de ça...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed