MSVC 2010 Linker Error 2005 с STD :: Cout в статической библиотеке

StackOverflow https://stackoverflow.com/questions/4636020

Вопрос

Я нашел другие примеры людей, имеющих эту проблему, но не повезли со своими решениями. Я пытаюсь использовать 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top