Как игнорировать lnk2005 & lnk1169?
-
28-09-2019 - |
Вопрос
Поэтому у меня есть проект Visual Studio 2010, который использует внешние библиотеки и для того, чтобы скомпилировать без LNK2005, мне пришлось жонглировать по порядку библиотек в настройках линкера.
Я получил его, чтобы компилировать штраф в режиме выпуска, но по любым причинам мне не удается получить его, чтобы скомпилировать без ошибок LNK в отладке.
Нет ли способа вообще игнорировать lnk2005 и сообщите линкеру просто использовать все, что он впервые встречает?
Спасибо!
// Редактировать: вот некоторые из ошибок вывода конкретной проблемы. Однако я уже пытался решить, что по-разному с каждым решением дает мне разные линкерные проблемы. Следовательно, я ищу общее решение игнорировать 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
Решение
Вы можете попробовать линкер-опцию / Force (вывод файла Force на вкладке «Общие ссылки» Свойства проекта). Это заставит линкер создать EXE / DLL, даже если такие ошибки возникают. Но слева от вас выяснить, действительно ли этот EXE работает вообще или даже правильно. Ведь я бы не рекомендовал эту стратегию.
Ошибки линкеров иногда могут быть утомительны для решения, но обычно это должно быть сделано только после миграции или настройки проекта. Это может занять некоторое время - иногда у меня мне больше, но это должно быть сделано правильно.
Другие советы
Вы абсолютно не должны игнорировать ошибки линкеров, когда-либо! Синкер говорит вам, что он запутался в символ, который определяется в нескольких местах - где он должен взять определение? Вы действительно хотите, чтобы это было произвольным? Как насчет того, когда вы измените свой код, и линкер случайно решает взять другое определение, которое может внезапно сломать свой код?
Вместо того, чтобы бороться с инструментом, исправьте свой код так, чтобы он компилировал и ссылки без ошибок. Эта статья MSDN Имеет некоторую информацию о фиксировании ее наряду с ссылками для получения дополнительной информации.