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