2011-09-03 255 views
0

可能重複:
How to pack multiple library archives (.a) into one archive file?UNIX:靜態庫鏈接到靜態庫

我有一個情況我必須向一個只提供一個單一的靜態庫(某文件)可執行文件來構建它。

然而,我在2份分割此lib中,因爲一個部件是共同的其他可執行文件,而另一個僅由一個需要的。

所以現在我有lib1內(對於EXE1)和LIB2(所有EXE文件)

的問題是,我不能提供兩個庫,所以我必須合併爲EXE1,LIB2到LIB1

我想我的編譯lib1.o與-llib2但即使它的工作原理,它看起來像什麼也沒發生

是否還有其他的辦法嗎?我只能考慮使用原始的目標文件,但我不喜歡這個主意

回答

3

有沒有需要兩個靜態庫;當使用靜態庫時,只有需要的函數(或變量)被複制到可執行文件 - 與共享庫不同的是庫中的所有內容都可以被可執行文件訪問。

機械,引用的其他question說明你需要做的:

  • 從一個庫中提取所有的目標文件
  • 將它們添加到其他圖書館

或者:

files=$(ar t lib1.a) 
ar x lib1.a 
ar r lib2.a $files 
rm -f $files lib1.a 
+0

它像一個魅力^^ –

0

你甚至可以編譯每個源文件,生成al l .o並通過使用ar創建兩個不同的庫。 整個庫將使用所有.o(您一起放入lib1.a和lib2.a中的那些)生成,較小的將只使用一組縮小的.o文件。 ...比單個Makefile,.o文件產生一次,兩個庫從這個工作中出來:完整的一個(libaplus2.a)和縮小的(lib1.a)。