2009-05-27 71 views
28

說我有a.so和b.so. 我是否可以將c.so作爲單個共享庫生成,其中包含由a和b導出的所有函數,當然可以解決所有內部依賴關係(即由a.so調用的所有b.so函數以及其他方式)?合併多個.so共享庫

我試圖

gcc -shared -Wl,soname,c.so -o c.so a.so b.so

,但它不工作。

也是一樣,如果我歸檔a.o和B.O在A.A和b.a(這不應該修改a.o和B.O),並做

gcc -shared -Wl,soname,c.so -o c.so a.a b.a

感謝

+0

最後,我使出庫腳本一組讓我來顯示所有的小型圖書館作爲一個單一的,但一個軟件可以鏈接到正確的「子」庫。 – Metiu 2009-05-28 20:07:37

回答

38

將多個共享庫合併爲一個對於除AIX之外的所有UNIXen實際上都是不可能的:鏈接器將.so視爲「最終」產品。

但合併檔案到。所以不應該是一個問題:

gcc -shared -o c.so -Wl,--whole-archive a.a b.a -Wl,--no-whole-archive 
+0

謝謝你的有用標誌:整個檔案! – 2011-10-14 01:25:34

7

在實踐中是不可能的。

從鏈接器的角度來看,SO庫是不包含鏈接所需的重定位信息的最終產品。

如果您有權訪問這兩個庫的源文件或目標文件,則可以直接編譯/鏈接來自它們的組合SO。

+1

「,如果您有權訪問這兩個庫的源文件或目標文件,則可以直接編譯/鏈接來自它們的組合SO。」 - - 我該怎麼做呢 ?具體來說,在Android平臺上。 – 2014-08-04 20:22:06