2010-11-03 52 views
4

因此,我有一個使用外部庫的Visual Studio 2010項目,並且爲了在沒有LNK2005的情況下編譯它,我不得不在鏈接器設置中與庫的順序進行週轉。如何忽略LNK2005&LNK1169?

我知道它在發佈模式下很好地編譯,但出於某種原因,我無法在調試時將它編譯爲LNK錯誤。

有沒有辦法通常忽略LNK2005,並告訴鏈接器只是使用他遇到的第一個?

謝謝!

//編輯:這裏是一些特殊問題的輸出錯誤。但是我已經試着用不同的方式解決這個問題,每個解決方案都給我提供了不同的鏈接器問題因此,我正在尋找通用的解決方案忽略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」。 – 2010-11-03 07:52:11

+0

你能告訴我們一些你得到的錯誤信息嗎? – Chubsdad 2010-11-03 07:54:39

+0

對不起,添加了我在Visual Studio上工作的信息 – Mat 2010-11-03 07:55:19

回答

10

您可以嘗試鏈接器選項/ FORCE(項目屬性的鏈接器常規選項卡中的強制文件輸出)。這將迫使鏈接器創建一個exe/dll,即使發生這種錯誤。但它留給你看看這個exe是否可以正常工作。畢竟我不會推薦這種策略。

鏈接器錯誤有時可能是單調乏味的,但通常只有在遷移或設置項目後才能完成。這可能需要相當長的一段時間 - 有時我花了一天多的時間,但它應該做得很好。

+0

非常感謝你 - 這正是我的問題的答案,併爲我的問題起作用,如魅力!頭痛,免費的! – Mat 2010-11-03 09:12:01

13

絕對不能忽略鏈接器錯誤!一個鏈接器告訴你,它對一個在多個地方定義的符號感到困惑 - 它應該從哪裏定義?你真的想要它是任意的嗎?當你改變你的代碼並且鏈接器隨機決定採用另一個可能突然破壞你的代碼的定義時呢?

而不是爭取工具,更正您的代碼,以便編譯和鏈接沒有錯誤。 This MSDN article有關於修復它的一些信息,以及更多信息的鏈接。

+1

但是最可能的定義是等價的,不是嗎?或者也許我的實際程序可以與任一定義一起工作,因爲它實際上並不依賴於它的功能 - 所以很有可能它會起作用 - 我只是需要它運行來測試某些東西 - 正如我所說我已經閱讀並嘗試各種修復問題 – Mat 2010-11-03 08:14:59

+4

@Mat:「最可能」和「好機會」是不適合編程的概念。鏈接器是一個計算機程序,一個愚蠢的,聽話的實體,必須確切知道它的輸入是什麼。修復鏈接器錯誤正是你需要做的工作。也許你想問一個關於如何解決你的項目的新問題,詳細解釋你的庫,DLL和項目設置的確切佈局。然而,最好把這個設置成最小化的設置。 – 2010-11-03 08:18:06

+0

但它們是合適的,如果我只是想獲得某些東西來運行來測試它。這不是我要發佈或想要浪費更多時間的東西 - 我只是需要它運行 – Mat 2010-11-03 08:18:58