как игнорировать LNK2005 & LNK1169? - PullRequest
5 голосов
/ 03 ноября 2010

Итак, у меня есть проект Visual Studio 2010, который использует внешние библиотеки, и для его компиляции без LNK2005 мне пришлось манипулировать с порядком библиотек в настройках компоновщика.

Я получил егонормально компилируется в режиме релиза, но по каким-то причинам мне не удается заставить его компилироваться без ошибок LNK при отладке.

Нет ли способа вообще игнорировать LNK2005 и сказать компоновщику просто использовать все, что он встречаетfirst?

Спасибо!

// edit: вот некоторые из выводимых ошибок проблемы PARTICULAR.однако я уже пытался решить эту проблему по-разному, и каждое решение давало мне разные проблемы с компоновщиком.поэтому я ищу общее решение игнорировать LNK2005

Error 7 error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) already defined in Libcmtd.lib(typinfo.obj) ...\msvcprtd.lib(MSVCP100D.dll)

Error 8 error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z) already defined in Libcmtd.lib(typinfo.obj) ...\msvcprtd.lib(MSVCP100D.dll)

Error 9 error LNK2005: _exit already defined in Libcmtd.lib(crt0dat.obj) ...\msvcprtd.lib(MSVCP100D.dll)

Error 10 error LNK2005: __invalid_parameter already defined in Libcmtd.lib(invarg.obj) ...\msvcprtd.lib(MSVCP100D.dll)

...

Error 37 error LNK1169: one or more multiply defined symbols found

Ответы [ 2 ]

13 голосов
/ 03 ноября 2010

Вы абсолютно не должны игнорировать ошибки компоновщика, когда-либо! Компоновщик говорит вам, что он запутался в символе, который определен в нескольких местах - откуда ему взять определение?Вы действительно хотите, чтобы это было произвольно?А как насчет того, чтобы изменить код и компоновщик случайно решил использовать другое определение, которое может внезапно нарушить ваш код?

Вместо того, чтобы бороться с инструментом, исправьте свой код, чтобы он компилировался и связывался без ошибок. Эта статья MSDN содержит некоторую информацию по ее исправлению, а также ссылки для получения дополнительной информации.

10 голосов
/ 03 ноября 2010

Вы можете попробовать опцию компоновщика / FORCE (Принудительный вывод файла на вкладке «Общие» компоновщика в свойствах проекта).Это заставит компоновщик создать exe / dll даже при возникновении таких ошибок.Но вам остается выяснить, работает ли этот exe вообще или даже правильно.В конце концов, я бы не рекомендовал эту стратегию.

Ошибки компоновщика иногда могут быть утомительными, но обычно это нужно делать только после миграции или настройки проекта.Это может занять много времени - иногда это занимало у меня больше дня, но это должно быть сделано правильно.

...