Visual Studio - error LNK2005 en mode debug
Je suis intégration de la 3e partie du code dans ma MFC application sous Visual Studio 2010.
Lorsque dans le mode de Débogage de l'erreur de génération suivante se produit:
1>LIBCMT.lib(invarg.obj) : error LNK2005: __initp_misc_invarg already defined in libcmtd.lib(invarg.obj)
1>LIBCMT.lib(invarg.obj) : error LNK2005: __call_reportfault already defined in libcmtd.lib(invarg.obj)
1>LIBCMT.lib(invarg.obj) : error LNK2005: __set_invalid_parameter_handler already defined in libcmtd.lib(invarg.obj)
1>LIBCMT.lib(invarg.obj) : error LNK2005: __get_invalid_parameter_handler already defined in libcmtd.lib(invarg.obj)
1>LIBCMT.lib(invarg.obj) : error LNK2005: __invoke_watson already defined in libcmtd.lib(invarg.obj)
1>LIBCMT.lib(invarg.obj) : error LNK2005: "void __cdecl _invoke_watson(unsigned short const *,unsigned short const *,unsigned short const *,unsigned int,unsigned int)" (?_invoke_watson@@YAXPBG00II@Z) already defined in libcmtd.lib(invarg.obj)
1>LIBCMT.lib(invarg.obj) : error LNK2005: __invalid_parameter already defined in libcmtd.lib(invarg.obj)
1>LIBCMT.lib(invarg.obj) : error LNK2005: "void __cdecl _invalid_parameter(unsigned short const *,unsigned short const *,unsigned short const *,unsigned int,unsigned int)" (?_invalid_parameter@@YAXPBG00II@Z) already defined in libcmtd.lib(invarg.obj)
1>LIBCMT.lib(invarg.obj) : error LNK2005: ___pInvalidArgHandler already defined in libcmtd.lib(invarg.obj)
1>LINK : warning LNK4098: defaultlib 'LIBCMT' conflicts with use of other libs; use /NODEFAULTLIB:library
1>D:\My Documents\Dev\MyProject\MyProject\Debug\MyProject.exe : fatal error LNK1169: one or more multiply defined symbols found
À l'aide de ce conseil j'ai été en mesure de terminer la construction de deux façons:
- En mode Release
- En mode de Débogage à l'aide de /FORCE:PLUSIEURS comme un autre linker option de ligne de commande
Dans le second cas (mode Debug) de nombreuses mises en garde sont encore signalés. Si j'ai aussi ajouter /NODEFAULTLIB:LIBCMT la plupart d'entre eux sont partis.
Quelle est la cause de cela?
Comment puis-je résoudre ce problème, au lieu de travailler autour d'elle?
OriginalL'auteur Jonathan | 2010-10-07
Vous devez vous connecter pour publier un commentaire.
Pour une raison quelconque, vous êtes de se lier à la fois LIBCMT et LIBCMTD (la version debug). (À partir de la lecture de la fin de chaque ligne d'erreur:
already defined in libcmtd.lib(invarg.obj)
)Vous êtes à la fixation de la chose en disant /NODEFAULTLIB:LIBCMT. Le debug/release drapeau sur la troisième partie de la bibliothèque que vous êtes reliant match contre le debug/release mode sur votre application? Je suppose que la troisième partie du code est en tirant dans un redondante de la bibliothèque en quelque sorte.
OriginalL'auteur sblom
Si vous êtes chanceux, votre 3ème partie package contient un xxx.lib ainsi que d'un xxxD.lib, comme pour LIBCMT. Ensuite, vous avez juste à le lien le plus approprié en fonction de release/debug.
A travaillé pour moi dans un cas similaire.
OriginalL'auteur yau
J'ai résolu le même problème de cette façon:
Dans l'Explorateur de solutions > Paramètres de Configuration > C/C++ > Génération de Code.
Dans la Bibliothèque d'Exécution de champ, sélectionnez.... pour mon "de la 3ème partie du code", j'ai dû sélectionner multithread (/MTd) et cela a fonctionné.
OriginalL'auteur Yura G