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