2009-05-28 6 views
0
error LNK2005: "public: __thiscall std::basic_ostream<char,struct std::char_traits<char> >::basic_ostream<char,struct std::char_traits<char> >(class std::basic_streambuf<char,struct std::char_traits<char> > *,bool)" ([email protected][email protected]@[email protected]@@[email protected]@[email protected][email protected]?$char_traits 
@[email protected]@@@[email protected][email protected]) already defined in msvcprtd.lib(MSVCP80D.dll) libcpmtd.lib 

Je reçois cette erreur lorsque j'essaie d'inclure l'option /clr et les options /MDd dans le sous-projet.Comment résoudre l'erreur de liaison 2005 dans Visual Studio?

Individuellement, tous les projets sont construits avec succès, mais quand je construis le projet principal, il montre les erreurs comme ci-dessus.

Comment résoudre celui-ci?

Je suis totalement vexé.

Répondre

0

Il semble que vous liez des bibliothèques statiquement compilées avec une DLL? msvcprtd.lib est une bibliothèque statique pour le STL qui est liée lorsque vous compilez avec /MDd.

Libcmptd.lib est une bibliothèque CRT qui est utilisée lorsque vous spécifiez /MTd.

See here pour lesquelles les bibliothèques sont utilisées par quel paramètre.

Vérifiez vos paramètres de construction afin qu'ils soient identiques.

0

L'éditeur de liens indique qu'il a vu ce symbole défini dans plusieurs fichiers/bibliothèques d'objets.

Essayez de rechercher les pour les exporter (par exemple en utilisant dumpbin), découvrez pourquoi (une bibliothèque standard est-elle liée statiquement?) Et si vous en avez besoin.

Pour ce cas précis:

Cet opérateur est fourni à la fois en ligne (ce qui provoque vos projets de le définir) et comme une exportation du msvcprtd.dll. Vous pouvez contourner ce problème en déclarant le symbole __declspec(dllimport).

0

Utilisez soit les bibliothèques d'exécution liées dynamiques ou statiques:

LIBCPMTD.LIB - multithread, lien statique

MSVCPRTD.lib - multithread, liens dynamiques (bibliothèque d'importation pour MSVCP80D.DLL)

1

Make vous que tous vos projets sont compilés avec les mêmes bibliothèques d'exécution, cela est indiqué dans:

Properties -> C/C++ -> Code Generation -> Runtime Library 

Si vous utilisez /MDd assurez-vous que tous les autres projets le sont aussi. Sinon, lorsque vous les liez tous dans le projet principal, il importera plusieurs versions des bibliothèques d'exécution menant à l'erreur que vous observez.

Questions connexes