2

Соблюдайте этот близкий сценарий, даже если он похож на мои предыдущие вопросы. Тем не менее, я не получаю ответа. Поэтому, пожалуйста, не сообщайте как дубликат.Visual C++ Runtime Library Linker Woes

У меня есть проект, который имеет 10 зависимостей. Сначала я скомпилировал, используя опцию/MTD в разделе когенерации C/C++ в основном проекте, и все его зависимости успешно собираются.

Далее я изменил параметр с/MTD на/MDd, и снова все зависимые проекты получают с успехом. Но для основного проекта следующие ошибки сообщили:


LIBCMTD.lib(osfinfo.obj) : error LNK2005: __open_osfhandle already defined in MSVCRTD.lib(MSVCR80D.dll) 

LIBCMTD.lib(lseeki64.obj) : error LNK2005: __lseeki64 already defined in MSVCRTD.lib(MSVCR80D.dll) 


sqlite3x.lib(sqlite3x_command.obj) : error LNK2005: "protected: wchar_t * __thiscall std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> >::_Myptr(void)" ([email protected][email protected][email protected][email protected]@@[email protected][email protected]@@[email protected]@IAEPA_WXZ) already defined in msvcprtd.lib(MSVCP80D.dll) 

MSVCRTD.lib(MSVCR80D.dll) : error LNK2005: __mkdir already defined in LIBCMTD.lib(mkdir.obj) 

MSVCRTD.lib(MSVCR80D.dll) : error LNK2005: __strdup already defined in 
LIBCMTD.lib(strdup.obj) 

    Creating library Debug/Application.lib and object Debug/Application.exp 
LINK : warning LNK4098: defaultlib 'MSVCRTD' conflicts with use of other libs; use /NODEFAULTLIB:library 

LINK : warning LNK4098: defaultlib 'LIBCMTD' conflicts with use of other libs; use /NODEFAULTLIB:library 

Как я могу это исправить?

+0

Редактировать исходный вопрос Добавить деталь вместо того, чтобы повторять вопрос. Если вы обновите вопрос, он вернется на первую страницу. Кроме того, добавьте щедрость, чтобы привлечь больше внимания. – tvanfosson

+0

Может ли тот, кто голосовал за закрытие, также ссылаться на дубликат? Спасибо. –

+1

Дубликат: http://stackoverflow.com/questions/925540/how-to-resolve-the-following-linker-errors-in-visualstudio – tvanfosson

ответ

5

Вы не можете смешивать библиотеки времени выполнения C. Если у вас есть библиотека или объект, скомпилированный/MT (ничего), вы не можете просто ссылаться на/MD. Вам нужно связать с потокобезопасным MSVCRT. Там нет, если и есть или нет, но об этом. Вы НЕ МОГУТ Смешать время выполнения C. Я всегда находил это лучше всего, даже в программах, которые не выполняют потоки, чтобы просто использовать/MT.

Вы запустили операцию очистки проекта, чтобы удалить уже построенные объекты и библиотеки? У вас также есть зависимость от SQLite, вы тоже это перестроили?

1

Когда связка статического C++ библиотеки связаны все вместе, все они должны иметь/MTD или все они должны иметь /MDd.You не может связать проект с/МПД с другим проектом с/MDD

Вероятно, это является причиной ошибок связывания. Причина, по которой вы получаете ее только в своем основном проекте, заключается в том, что ваш основной проект является единственным, на самом деле связанным с этим. Пожалуйста, сообщите нам, разрешило ли оно вашу проблему.

Я помню, что у меня была такая же проблема с/MTD и/MDd, и у меня были очень похожие ошибки.

0

Мой ответ here может быть полезен, ссылаясь на некоторые статьи MSDN, которые я нашел очень полезными при решении моей версии этой проблемы.

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