Librairies statiques, sousprojets et STL

Librairies statiques, sousprojets et STL - C++ - Programmation

Marsh Posté le 28-11-2002 à 06:17:39    

Salut à tous et toutes
 
J'utilise MSVC++ 98 avec VStudio 6 et je travaille sur un projet assez complexe. Ce projet inclus des sous-projets, lesquels sousprojets créent des librairies statiques.
Ces librairies contiennent des fichiers objets générées à partir de mes fichiers sources. Jusque là, rien que de très normal me direz-vous.
Le problème vient du fait que ces fichiers sources utilisent la STL pour accéder à des fichiers, donc en particulier la classe fstream
Quand je compile et crée les librairies à partir des sous projets, je n'ai aucun problème, toutes les étapes (compilation + librairie) passent bien
Mais quand je veux créer le projet principal qui utilise ces librairies, ça compile bien mais l'édition de lien plante complètement. Je reçois ce genre de message :
 
msvcprtd.lib(MSVCP60D.dll) : warning LNK4006: "public: void __thiscall std::basic_ofstream<char,struct std::char_traits<char> >::`vbase destructor'(void)" (??_D?$basic_ofstream@DU?$char_traits@D@std@@@std@@QAEXXZ) already defined in Tools.lib(MathUtil.obj); second definition ignored
 
Ce qui semble clairement dire que mon fichier MathUtil.obj redéfinis la class ofstream ce qui est faux puisque ce fichier ne fait que l'utiliser. Enfin, c'est ce que je crois puisque dans mon esprit, le fait de créer une librairie, c'est juste mettre les fichiers obj bout à bout de manière à n'avoir plus qu'un seul fichier à transporter.
Malheureusement, il semble que le compilateur ajoute tout seul des librairies dans les fichiers objets. Comment faire pour lui interdire de faire ça ? J'ai bien essayé /nodefaultlib dans l'étape librairie des sous-projets mais ça ne change rien car elles sont inclues dans les fichiers objets, pas dans la librairie.
 
Comment puis-je faire donc pour résoudre ce problème ?
 
Merci d'avance pour votre aide
 
Olivier

Reply

Marsh Posté le 28-11-2002 à 06:17:39   

Reply

Marsh Posté le 28-11-2002 à 09:21:52    

Bon ben j'ai trouvé...
 
En fait, il faut s'assurer que tous les sous-projets utilisent bien la même version de la RTL que le projet principal. On trouve ça dans l'onglet C/C++, la catégorie Code Generation, le choix Use Runtime library. Je vous conseille la version Multithread DLL Debug pour une version Debug. Dans le cas de la version Release, utilisez Multihread DLL tout court
 
Ensuite, Il faut être sûr que les librairies qui utilisent MFC par le code ont bien les options de projet qui indiquent que MFC est utilisé (onglet Général) et là encore, il faut être sûr que cette option est bien la même que celle du projet principal, si celui-ci utilise MFC bien sûr...
 
Voila voila
En espérant que ça pourra vous aider

Reply

Sujets relatifs:

Leave a Replay

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