MSVC 2010 Linker Error 2005 с STD :: Cout в статической библиотеке
-
08-10-2019 - |
Вопрос
Я нашел другие примеры людей, имеющих эту проблему, но не повезли со своими решениями. Я пытаюсь использовать STD :: Cout в статической библиотеке, которая также использует Boost Threads и Bind. Когда я не пользуюсь и std::cout
Он компилирует и ссылается отлично с основной программой, но когда я делаю, и я компилирую библиотеку, которую у меня нет проблем, но когда я компилирую и связывая основную программу, которая использует статическую библиотеку, я получаю тону, как:
2> libcmt.lib (crt0init.obj): ошибка lnk2005: ___xi_z уже определена в msvcrtd.lib (cinitexe.obj) 2> libcmt.lib (crt0init.obj): ошибка lnk2005: ___xc_a уже определена в msvcrtdd.lib (cinitexe. OBJ) 2> libcmt.lib (crt0init.obj): ошибка lnk2005: ___xc_z уже определена в msvcrtd.lib (cinitexe.obj) 2> libcmt.lib (mlock.obj): ошибка lnk2005: __unlock уже определено в msvcrtd.lib ( Msvcr100d.dll) 2> libcmt.lib (mlock.obj): ошибка lnk2005: __Lock уже определен в msvcrtd.lib (msvcr100d.dll) 2> libcmt.lib (winxfltr.obj): ошибка lnk2005: __xcptfilter уже определен в MSVCRTD. lib (msvcr100d.dll) 2> libcmt.lib (crt0.obj): ошибка lnk2005: _maincrtstartup уже определен в msvcrtd.lib (crtexe.obj)
так далее...
Я попытался зайти на свои настройки линкера и остановить его от использования конфликтующую библиотеку, перечисленную в выведенном в результате ошибки, но я не могу получить это правильно. Если я скажу ему, чтобы перестать использовать одну библиотеку, она может решить проблему, но дай мне несколько отсутствующих внешних символов, то я включаю в себя библиотеку, с которыми у него проблемы с проблемами, но я все еще получаю несколько «уже определенных». Любые подсказки к чему я могу сделать, чтобы исправить это? Должен ли я просто сделать другой класс под названием «log» или что-то и просто получить доступ к этому из основного .exe (который бы использовать библиотеку строк, которые могут снова вызвать проблемы, но я еще не пробовал)? Спасибо за любую помощь.
Решение
Попробуйте проверить -> Проект + свойства, C / C ++, генерация кода, библиотека времени выполнения. Ваш .lib и ваш главный проект должны использовать ту же настройку здесь.
Другие советы
Щелкните правой кнопкой мыши свой проект, свойства, C / C ++, создание кода, настройки библиотеки времени выполнения. Это источник вашей проблемы. Настройки там / mt и / md. Вы связываете код, который имеет конфликтующие значения для этой настройки, все должно быть скомпилировано с тем же.
Повышение может быть тем. Проверьте наличие дополнительных зависимостей вашего линкера. IIRC, есть MT или MD в их имени.
LNK2005 возникает, когда два объекта компиляции содержат одни и те же символы. Когда вы пытаетесь связать их вместе, линкер не знает, что делать с тем, что он имеет дубликаты всего, отсюда и ошибка.
В частности, звучит, как ваш статический Lib / может быть, может быть составлен /MT
который связывает временную среду MSVC в статиственно. Похоже, вы пытаетесь скомпилировать свой код с помощью параметров по умолчанию (/MD
, динамическая ссылка на MSVCR100.DLL
, MSVCP100.DLL
).
Видеть http://msdn.microsoft.com/en-us/library/2kzt1wy3.aspx.
Вы можете либо перестроить указанную статическую библиотеку, обеспечивающую ее связанную с динамическими библиотеками или стараться изо всех сил.
Я должен добавить, что D
В конце просто означает отладку. т.е. MSVCP100D.DLL
это отладочная версия MSVCP100.DLL
.