2009-12-10 77 views
1

我有一個靜態庫A,其中還使用靜態庫B,C和D.自動鏈接一個靜態庫的依賴性

我然後有應用X和Y這兩者中使用的,但不是B,C或D.

是否有某種方式來使其X和Y將自動看到一個用B,C和d並將它們連接起來,這樣我就不需要跟蹤整個依賴關係樹這樣我就可以顯式傳遞每個靜態庫(相當多的東西像Windows,Boost等)?

回答

2

靜態庫不會與其他靜態庫鏈接。只有建立在可執行文件(或共享庫/ DLL)的聯動執行,並跟蹤此(當然)是使用化妝的方式。

-1

簡單的方法是,以始終提供特定庫A,B,C,和d被鏈接。對於真正的庫,鏈接器僅檢索所需的模塊。

A與其他庫有一些隱式鏈接的關鍵問題是它們不一定是唯一可識別的。例如,它應該使用版本2.0還是3.1?一個在/ usr /共享/ lib或一個在/ usr/lib中/ X11/xdm的/股/ lib目錄?等

+0

的問題是一樣的東西提升其很難X知道哪個升壓libaries A中使用的,如果X didnt碰巧使用相同的Boost庫鏈接錯誤,因此原因,我希望它automatcally鏈接它。如果A使用了1.38的增強和X 1.40的增強,那麼無論天氣如何,這個特定組件的鏈接都是自動的,或者是經過了解使用哪個增強庫A的相當大的努力。 – 2009-12-10 19:08:41

+0

這樣做的缺點當然是延長了鏈接時間。 – 2009-12-10 19:08:46

1

我認爲,從概念上講,您可能可以將庫合併在一起以達到您想要的效果 - 它們僅僅是爲鏈接器準備好的符號集合。話雖如此,我從來沒有見過一個工具來做到這一點。 lib的二進制格式是一個編譯器問題,所以它必須是一個mingw或gcc特定的工具。

在升壓知道哪個版本的LIB A使用方面,確實沒有太多了,但找到A.文檔

+0

如果您使用GCC編譯器(或其他UN * X/Linux編譯器),則可以使用ar工具來操作靜態庫。在這些平臺上,庫是簡單的連接目標文件,帶有可選的索引。但是,從多個小型圖書館創建一個大型圖書館是一個好主意是另一回事。 – 2009-12-10 20:02:44