2013-11-07 4 views
1

Я компиляция проекта и имеют следующие ошибки:Несколько ошибок LNK2005

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) 

Когда я удалить две библиотеки, эти ошибки перестанут появляться, но у меня есть некоторые нерешенные внутренние символы ошибки. Поэтому я должен поддерживать эти библиотеки. Есть ли способ, которым я могу игнорировать уже определенные функции, поэтому у меня нет ошибки LNK2005?

+0

О каких «тех библиотеках» вы говорите? – AnT

+0

Это libjpeg.lib и libpng.lib – user2726706

ответ

12

Вы связываете свой проект с двумя версиями библиотеки времени выполнения: LIBCMTD.lib (статическая многопоточная отладка) и MSVCRTD.lib (многопоточная библиотека отладки). Почему обе эти две версии присутствуют в вашем проекте в то же время, невозможно сказать, не зная больше о вашей настройке.

Подобные ситуации могут возникнуть, если вы добавите сторонние библиотеки в свой проект, требующие разные версии библиотеки времени выполнения.

Это часто можно обойти с помощью

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

настройки в свойствах проекта для вашего исполняемого файла. Решите, с какой библиотекой вы хотите работать (LIBCMTD.lib или MSVCRTD.lib) и попросите компоновщика игнорировать другой.

+0

Когда я удаляю эту строку, программа компилируется без ошибок: объект [i] .vrml_id = arVrmlLoadFile (object [i] .name); Я не знаю, что может быть неправильно с этой функцией. Но я думаю, что могут быть некоторые функции, называемые arVrmlLoadFile, который использует некоторые общие функции ... – user2726706

2

Дополнительно к тому, что сказал @Ant,

Эта страница MSDN показывает, как/что создать «Игнорировать специальные библиотеки по умолчанию» список: https://msdn.microsoft.com/en-us/library/aa267384(v=vs.60).aspx

Под свойства-> Linker-> Вход- > Игнорировать конкретные библиотеки по умолчанию

+0

Это очень полезная ссылка! Благодарю. – TinyRacoon

Смежные вопросы