2013-03-13 75 views
1

我有一個非託管的C++項目,當鏈接器庫(Properties-> Linker-> Input-> Additional Dependencies)按特定順序列出,但在更改庫的順序時運行正常時會產生運行時錯誤。我明白爲什麼訂單可能導致鏈接錯誤(Why does the order in which libraries are linked sometimes cause errors in GCC?),但它怎麼可能導致運行時錯誤?我在VS2005,2008和2010中觀察到了這一點。爲什麼鏈接庫的順序會導致運行時錯誤?

+0

您是混合編譯器版本還是調試和發佈? – drescherjm 2013-03-13 11:13:43

+0

不,所有的庫都是由相同的編譯器以相同的風格構建的。 – themik81 2013-03-13 11:27:36

回答

1

什麼樣的運行時錯誤?你不說,所以我們必須猜測。

下面是運行時錯誤可能發生的一種方式:如果兩個不相關的庫公開具有相同名稱的不同函數,則鏈接器將選擇它找到的第一個實現。

如果你打算叫draw()paint.lib,但gunfight.lib早些時候在鏈接列表,你會調用錯誤draw(),後果不堪設想。

+0

謝謝,我不知道,我認爲鏈接器會在這種情況下投訴。我沒有指定運行時錯誤,因爲我不知道如何在沒有提供大量上下文的情況下呈現它們。我會調查你的建議是否是原因。 – themik81 2013-03-14 10:04:28

+0

是的,準系統錯誤可能不會幫助;它將不得不被蒸餾器變成「錯誤的功能被稱爲」之類的東西。這裏有一個想法:通常連接器具有「詳細」參數,這些參數將以痛苦的細節傳遞他們正在做的事情。找出適用於您的特定工具集的參數,並將它用於兩個鏈接訂單。通過diff工具運行輸出,看看有沒有什麼突出的。請讓我們知道它是如何變成這樣或那樣。祝你好運。 – 2013-03-14 11:03:10

相關問題