2010-11-03 2 views
4

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

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

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

Спасибо!

// edit: вот некоторые из ошибок, возникающих в ОСОБЕННОСТИ. однако я уже пытался решить это по-разному с каждым решением, дающим мне разные проблемы с компоновщиками. поэтому я ищу общее решение игнорировать LNK2005

Error 7 error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" ([email protected]@[email protected]@@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 &)" ([email protected]@[email protected]@@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

+0

Я понятия не имею, о чем вы говорите. GNU ld не имеет этих «LNK2005» и «LNK1169». –

+0

вы можете показать нам еще несколько сообщений об ошибках? – Chubsdad

+0

извините, добавил информацию, что я работаю над Visual Studio – Mat

ответ

10

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

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

+0

Большое вам спасибо - это именно ответ на мой вопрос и работает для моей проблемы, как шарм! без головных болей! – Mat

13

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

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

+1

, но, скорее всего, определения эквивалентны в любом случае, нет?или, может быть, моя фактическая программа будет работать с любым определением, потому что на самом деле она не использует функциональность, зависящую от нее, поэтому есть хорошие шансы, что она будет работать - мне просто нужно ее запустить, чтобы проверить что-то, - и, как я уже сказал, читать и пробовать различные исправления проблемы – Mat

+4

@Mat: «скорее всего» и «хороший шанс» - это понятия, не подходящие для программирования. Компилятор - это компьютерная программа, тупой, послушный объект, который должен точно знать, что такое его входы. Исправление ошибок компоновщика - именно то, что вам нужно сделать, чтобы заставить его работать. Возможно, вы хотите задать новый вопрос SO о том, как исправить * проект, подробно объяснив точное расположение ваших библиотек, библиотек DLL и параметров проекта. Однако лучше всего довести это до минимальной настройки, которая не работает. –

+0

, но они подходят, если я просто хочу что-то запустить, чтобы протестировать его. это не то, что я собираюсь опубликовать или захочу потратить на это гораздо больше времени - мне просто нужно его запустить – Mat

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