我有一個非託管的C++項目,當鏈接器庫(Properties-> Linker-> Input-> Additional Dependencies)按特定順序列出,但在更改庫的順序時運行正常時會產生運行時錯誤。我明白爲什麼訂單可能導致鏈接錯誤(Why does the order in which libraries are linked sometimes cause errors in GCC?),但它怎麼可能導致運行時錯誤?我在VS2005,2008和2010中觀察到了這一點。爲什麼鏈接庫的順序會導致運行時錯誤?
回答
什麼樣的運行時錯誤?你不說,所以我們必須猜測。
下面是運行時錯誤可能發生的一種方式:如果兩個不相關的庫公開具有相同名稱的不同函數,則鏈接器將選擇它找到的第一個實現。
如果你打算叫draw()
從paint.lib
,但gunfight.lib
早些時候在鏈接列表,你會調用錯誤draw()
,後果不堪設想。
謝謝,我不知道,我認爲鏈接器會在這種情況下投訴。我沒有指定運行時錯誤,因爲我不知道如何在沒有提供大量上下文的情況下呈現它們。我會調查你的建議是否是原因。 – themik81 2013-03-14 10:04:28
是的,準系統錯誤可能不會幫助;它將不得不被蒸餾器變成「錯誤的功能被稱爲」之類的東西。這裏有一個想法:通常連接器具有「詳細」參數,這些參數將以痛苦的細節傳遞他們正在做的事情。找出適用於您的特定工具集的參數,並將它用於兩個鏈接訂單。通過diff工具運行輸出,看看有沒有什麼突出的。請讓我們知道它是如何變成這樣或那樣。祝你好運。 – 2013-03-14 11:03:10
- 1. 該程序爲什麼會導致運行時錯誤?
- 2. 爲什麼鏈接到FastCGI庫會導致段錯誤?
- 3. 爲什麼此異常不會導致運行時錯誤?
- 4. 這段代碼爲什麼會導致運行時錯誤?
- 5. 爲什麼有時用.so文件鏈接會導致鏈接器錯誤?
- 6. 爲什麼簡單地鏈接到GL會導致段錯誤?
- 7. 是什麼導致iOS鏈接錯誤?
- 8. 什麼可能會導致Vb6運行時錯誤430
- 9. 爲什麼OCR(MODI.MiLANGUAGES.miLANG_ENGLISH,true,true)會導致OCR運行錯誤?
- 10. 爲什麼會在後續運行中導致錯誤?
- 11. 爲什麼我的asp.net導致運行時錯誤?
- 12. 爲什麼我的代碼導致運行時錯誤?
- 13. 靜態鏈接庫文件會導致鏈接錯誤
- 14. 爲什麼聲明模板實例化的運行時多態會導致鏈接器錯誤?
- 15. 爲什麼在使用printf語句時__thread會導致鏈接器錯誤?
- 16. 爲什麼使用WordPress永久鏈接時Facebook Like按鈕會導致錯誤?
- 17. 爲什麼這會導致SIGABRT錯誤?
- 18. PDO:爲什麼會導致錯誤?
- 19. 爲什麼會導致段錯誤?
- 20. 爲什麼這會導致錯誤?
- 21. 爲什麼它會導致錯誤?
- 22. 爲什麼會導致「exc_bad_access」錯誤?
- 23. 這爲什麼會導致StackOverFlow錯誤?
- 24. .val()爲什麼會導致錯誤?
- 25. 爲什麼vmovapd會導致段錯誤?
- 26. 爲什麼CPPUNIT_ASSERT_MESSAGE會導致OpenMP錯誤?
- 27. 爲什麼StreamReader.readexactly()會導致套接字錯誤,但不會導致StreamReader.read()?
- 28. 在C中導致內存錯誤的順序鏈接列表?
- 29. 爲什麼切片長度大於容量會導致運行時錯誤?
- 30. 爲什麼這個子類代碼會導致運行時錯誤?
您是混合編譯器版本還是調試和發佈? – drescherjm 2013-03-13 11:13:43
不,所有的庫都是由相同的編譯器以相同的風格構建的。 – themik81 2013-03-13 11:27:36