Question

J'ai trouvé d'autres exemples de personnes ayant ce problème, mais ont pas eu de chance avec leurs solutions. Je suis en train d'utiliser std :: Cout dans une bibliothèque statique qui utilise également des fils de stimuler et de se lier. Quand je ne l'utilise et std::cout il compile et des liens très bien avec le programme principal, mais quand je fais et je compiler la bibliothèque, je n'ai aucun problème, mais quand je compiler et lier le programme principal qui utilise la bibliothèque statique je reçois une tonne de choses comme:

2>LIBCMT.lib(crt0init.obj) : error LNK2005: ___xi_z already defined in MSVCRTD.lib(cinitexe.obj)
2>LIBCMT.lib(crt0init.obj) : error LNK2005: ___xc_a already defined in MSVCRTD.lib(cinitexe.obj)
2>LIBCMT.lib(crt0init.obj) : error LNK2005: ___xc_z already defined in MSVCRTD.lib(cinitexe.obj)
2>LIBCMT.lib(mlock.obj) : error LNK2005: __unlock already defined in MSVCRTD.lib(MSVCR100D.dll)
2>LIBCMT.lib(mlock.obj) : error LNK2005: __lock already defined in MSVCRTD.lib(MSVCR100D.dll)
2>LIBCMT.lib(winxfltr.obj) : error LNK2005: __XcptFilter already defined in MSVCRTD.lib(MSVCR100D.dll)
2>LIBCMT.lib(crt0.obj) : error LNK2005: _mainCRTStartup already defined in MSVCRTD.lib(crtexe.obj)

etc ...

J'ai essayé d'aller dans mes paramètres de l'éditeur de liens et de l'arrêter d'utiliser la bibliothèque de conflits répertoriés dans la sortie d'erreur, mais je ne peux pas faire les choses. Si je dis à cesser d'utiliser une bibliothèque, il peut régler les problèmes, mais donnez-moi quelques symboles externes manquants, puis je passe la bibliothèque, il avait des problèmes avec mais je reçois encore quelques « déjà défini ». Tous les indices sur ce que je peux faire pour résoudre ce problème? Dois-je faire une autre classe appelée « journal » ou quelque chose et accéder simplement à partir du principal .exe (qui utiliserait la bibliothèque de chaînes, ce qui peut causer des problèmes encore, mais je ne l'ai pas encore essayé)? Merci pour toute aide.

Était-ce utile?

La solution

Essayez de vérifier -> Propriétés du projet +, C / C ++, génération de code, bibliothèque d'exécution. Votre .lib et votre projet principal doivent utiliser le même paramètre ici.

Autres conseils

Cliquez-droit sur votre projet, Propriétés, C / C ++, génération de code, Runtime Library paramètre. C'est la source de votre problème. Il y a des paramètres / MT et / MD. Vous liez le code qui a des valeurs contradictoires pour ce paramètre, tout doit être compilé avec le même.

Boost pourrait être celui-là. Vérifier le réglage de dépendances supplémentaires votre linker. IIRC, les .libs ont mt ou md en leur nom.

LNK2005 se produit lorsque deux objets de compilation contiennent les mêmes symboles. Lorsque vous essayez de les relier entre eux, l'éditeur de liens ne sait pas quoi faire avec le fait qu'il a des copies de tout, d'où l'erreur.

Plus précisément, il semble que votre lib / peut-être boost statique peut avoir été compilé avec /MT qui relie le moteur d'exécution MSVC statiquement. Il semble que vous essayez de compiler votre code avec les options par défaut (/MD, un lien dynamique MSVCR100.DLL, MSVCP100.DLL).

Voir http://msdn.microsoft.com/en-us/library /2kzt1wy3.aspx

Vous pouvez Reconstruit ladite bibliothèque statique assurant qu'il est lié avec les bibliothèques dynamiques, ou essayez votre code lié statiquement.

Je dois ajouter que la D à la fin signifie simplement débogage. à savoir MSVCP100D.DLL est la version de débogage de MSVCP100.DLL.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top