2011-09-06 133 views
3

我有3個項目A,B和C. A是通用的,並且由B使用並最終使用C. B有點特別,並且到目前爲止僅用於C.如何在Eclipse中將靜態庫鏈接到靜態庫中CDT

現在,當我希望A和B儘可能重用時,我想都是靜態庫。

因此,我將A和B鏈接到靜態庫並將C鏈接到可執行文件,但是當我想鏈接C 時,它會在A函數上給我一些undefined reference錯誤。所以我將庫A添加到鏈接器選項來解決這個問題,但它沒有幫助。

所以我想:當我想部署B,那麼我也將不得不部署A能夠鏈接。有沒有辦法將靜態庫A鏈接到靜態庫B中,所以我不必部署2個文件?

如果是這樣,那麼如何使用Eclipse CDT實現此目標,因爲我無法找到爲歸檔人員定義其他目標的地方。

加成

我正在linux下的,但事情還應該在Windows下運行。但主要是我需要一個針對linux的解決方案來跟上發展。

編輯

現在,我通過將A和B爲靜態庫,然後用剩下的* .o文件將其鏈接到可執行文件「解決」這個問題,但我不認爲這是很好的。

回答

1

靜態庫不能與另一個靜態庫鏈接。我認爲,因爲靜態庫不是可執行代碼,所以完全鏈接過程(主要是引用分辨率)沒有完成。它僅適用於動態庫和可執行文件。

+0

所以你說我應該將它們編譯成動態庫? – Nobody

+0

是的,要部署B單獨使用,不使用C,最好將其作爲動態庫 –

+0

哦,對不起,忘了提及我在linux下,但我試圖成爲平臺獨立。當然,鏈接不能獨立於平臺,所以我首先需要一個可用的linux版本。 – Nobody

3

更改您的鏈接順序。 C使用B,B使用A. C不直接使用A,對吧?

你寫:

gcc -o C -lA -lB 

將無法​​正常工作。你寫

​​

它的工作原理。

如果CDT,你可以去option-> C/C++ Build-> setting-> XXX C linker-> Libraries,並改變A和B的順序。

另一種方法:使用-u選項。

看到這個: http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html 但是,我從來沒有成功。 有誰能告訴我如何使用-u選項?