2009-12-24 6 views
2

Je développe l'application en utilisant VC++ 6.newbie: Libérer CRT lib utilisé par la bibliothèque

J'ai une DLL tierce. Cette bibliothèque compilée en tant que DLL multithread (/ MD) et mon application aussi. Mais je ne lien:

LINK : warning LNK4075: ignoring /EDITANDCONTINUE due to /INCREMENTAL:NO specification 
msvcprtd.lib(MSVCP60D.dll) : error LNK2005: "public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::~basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(void)" (??1?$basic_strin 
[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]) already defined in XXXApi.lib(CODbg.obj) 
msvcprtd.lib(MSVCP60D.dll) : error LNK2005: "public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(class std::basic_string<c 
har,struct std::char_traits<char>,class std::allocator<char> > const &)" ([email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@@Z) already defined in XXXApi.lib(Dictionary.obj) 
../../Exes/win2k3_oracle11/XXX.exe : fatal error LNK1169: one or more multiply defined symbols found 
Error executing link.exe. 

De here je vois que même si les deux 3e bibliothèque et mon code compilé comme/MD, il est peut-être en conflit avec ancien/nouveau iostream Beining utilisé.

Est-il possible de déterminer quelle bibliothèque iostream old/new est utilisée par une bibliothèque tierce?

UPD: La bibliothèque tierce est statique et non dynamique comme je le pensais auparavant. La bibliothèque est compilée/MD. Dependency Walker fonctionne avec les DLL wirh et non avec les libs.

Répondre

2

Il existe une dépendance Walker, si vous ne connaissez pas cet outil. Glissez et déposez votre DLL ou exe sur la fenêtre principale. Il montrera toutes les dépendances.

Et si vous souhaitez lier à une DLL tierce, tout ce dont vous avez besoin est un .lib fait pour cette DLL. Si vous n'avez pas ce fichier .lib, vous pouvez toujours en faire un en utilisant lib.exe ou polib.exe à partir de pelles c tools. polib est plus facile à utiliser car vous n'avez pas besoin d'écrire un fichier .def. http://www.smorgasbordet.com/pellesc/

J'espère que cela aide votre question. Editer: Avez-vous le code source du fichier .lib que vous utilisez?