2011-02-28 66 views
1

我試圖找出在嘗試編譯Qt Creator中的代碼時導致錯誤的東西,即在我外部構建的庫中進行鏈接。g ++鏈接器順序問題

它抱怨「未定義的myclass :: myclass(args)」引用構造函數。

但是,這個類已經建立,並且目標文件被包含在名爲common.a的存檔中。

引用MyClass的其實是另一個庫中的代碼,稱爲CSV.a

所以,我知道我的Qt的項目可以看到CSV.a,我知道有在common.a到的東西其他參考它不是在抱怨,但顯然CSV.a中的內容無法看到這種安排中常見的東西。

我需要做什麼改變?

+0

您是否定義了構造函數? – 2011-02-28 18:36:37

+0

是的,構造函數是在myclass.cpp文件中定義的,並且生成了myclass.o,並將其包含在歸檔文件中common.a – Derek 2011-02-28 18:41:24

+0

這是否解決了您的問題:http://stackoverflow.com/questions/1095298/gcc -c-linker-errors-undefined-reference-to-vtable-for-xxx-undefined-referen/1095321#1095321 – 2011-02-28 19:04:57

回答

0

您可能需要確保在鏈接器命令行CSV.a後面跟着common.a,而不是相反。

4

鏈接器使用庫在命令行上列出的順序來確定哪些符號實際需要。你需要從最依賴的到最不依賴的順序排列,這樣才能做出決定。例如,首先列出CSV.a,以便編譯器知道它需要在某處找到myclass::myclass(args)。然後列出common.a秒,然後編譯器將找到並鏈接該構造函數。

+0

好的答案,但我選擇了格言,因爲他在第一 – Derek 2011-03-01 18:59:34