Plusieurs erreurs LNK2005

Je comstack un projet et j’ai les erreurs suivantes:

LIBCMTD.lib(_file.obj) : error LNK2005: ___iob_func already defined in MSVCRTD.lib(MSVCR90D.dll) LIBCMTD.lib(dbgheap.obj) : error LNK2005: __CrtSetCheckCount already defined in MSVCRTD.lib(MSVCR90D.dll) LIBCMTD.lib(crt0dat.obj) : error LNK2005: _exit already defined in MSVCRTD.lib(MSVCR90D.dll) LIBCMTD.lib(crt0dat.obj) : error LNK2005: __exit already defined in MSVCRTD.lib(MSVCR90D.dll) LIBCMTD.lib(crt0dat.obj) : error LNK2005: __cexit already defined in MSVCRTD.lib(MSVCR90D.dll) LIBCMTD.lib(crt0dat.obj) : error LNK2005: __amsg_exit already defined in MSVCRTD.lib(MSVCR90D.dll) LIBCMTD.lib(crt0dat.obj) : error LNK2005: __initterm_e already defined in MSVCRTD.lib(MSVCR90D.dll) LIBCMTD.lib(fflush.obj) : error LNK2005: _fflush already defined in MSVCRTD.lib(MSVCR90D.dll) LIBCMTD.lib(dbghook.obj) : error LNK2005: __crt_debugger_hook already defined in MSVCRTD.lib(MSVCR90D.dll) LIBCMTD.lib(invarg.obj) : error LNK2005: __invoke_watson already defined in MSVCRTD.lib(MSVCR90D.dll) LIBCMTD.lib(setlocal.obj) : error LNK2005: __configthreadlocale already defined in MSVCRTD.lib(MSVCR90D.dll) LIBCMTD.lib(tidtable.obj) : error LNK2005: __encode_pointer already defined in MSVCRTD.lib(MSVCR90D.dll) LIBCMTD.lib(tidtable.obj) : error LNK2005: __decode_pointer already defined in MSVCRTD.lib(MSVCR90D.dll) LIBCMTD.lib(sprintf.obj) : error LNK2005: _sprintf already defined in MSVCRTD.lib(MSVCR90D.dll) LIBCMTD.lib(crt0init.obj) : error LNK2005: ___xi_a already defined in MSVCRTD.lib(cinitexe.obj) LIBCMTD.lib(crt0init.obj) : error LNK2005: ___xi_z already defined in MSVCRTD.lib(cinitexe.obj) LIBCMTD.lib(crt0init.obj) : error LNK2005: ___xc_a already defined in MSVCRTD.lib(cinitexe.obj) LIBCMTD.lib(crt0init.obj) : error LNK2005: ___xc_z already defined in MSVCRTD.lib(cinitexe.obj) 

Lorsque je supprime deux bibliothèques, ces erreurs cessent d’apparaître, mais j’ai des erreurs de symboles internes non résolues. Je dois donc maintenir ces bibliothèques. Existe-t-il un moyen d’ignorer les fonctions déjà définies afin d’éviter l’erreur LNK2005?

Vous LIBCMTD.lib votre projet à deux versions de la bibliothèque d’ LIBCMTD.lib : LIBCMTD.lib (débogage statique multithread) et MSVCRTD.lib (DLL de débogage multithread). Comment se fait-il que ces deux versions soient simultanément présentes dans votre projet, il est impossible de le dire sans en savoir plus sur votre configuration.

Cela peut se produire si vous ajoutez à votre projet des bibliothèques tierces qui exigent différentes versions de la bibliothèque d’exécution.

Cela peut souvent être contourné en utilisant

Project Properties -> Linker -> Input -> Ignore Specific Default Libraries

paramètre dans les propriétés du projet pour votre exécutable. Choisissez la bibliothèque avec laquelle vous voulez travailler ( LIBCMTD.lib ou MSVCRTD.lib ) et demandez à l’éditeur de liens d’ignorer l’autre.

En plus de ce que @Ant a dit,

Cette page MSDN vous explique comment / quoi configurer la liste “Ignorer les bibliothèques par défaut spécifiques”: https://msdn.microsoft.com/en-us/library/aa267384(v=vs.60).aspx

Sous Propriétés-> Éditeur de liens-> Entrée-> Ignorer les bibliothèques par défaut spécifiques