2013-12-18 243 views
3

我正在寫一個需要處理XML的靜態庫。我希望它包含所有必需的東西,但我不知道如何使其他靜態庫鏈接到它,即libxml2。鏈接靜態庫與其他靜態庫

我將-c標誌傳遞給gcc生成.oar然後用於創建lib。我必須通過什麼魔標組合來讓我的靜態庫吞下libxml2?

+1

[是否此相關的問題和答案(http://stackoverflow.com/q/13128/2065121)幫助呢? –

+0

@RogerRowland - 它的確如此。你可以讓它成爲答案,我可以接受它嗎? – ruipacheco

+1

好吧,這已經是別人的回答了 - 只是在關聯的問題中提出了一個答案,我所做的只是搜索。 –

回答

4

圖書館不只是吞下其他圖書館。有兩種解決方案可以做你想做的事。

  1. 與最終目標中的兩個庫鏈接,首先指定新的 庫。
  2. 複製libxml2庫,並使用lib工具 將對象添加到它。
1

可悲的是,什麼是最爲有效的,我是從靜態庫提取所有.o秒,然後包括他們與你的.o s到做一個.a

所以,你可以看到的內容libxml2.aar t libxml2.a
比方說,爲了簡單起見,它僅包含:xml2a.oxml2b.o
你想與你的mine.o這些結合起來,使mine.a

你需要首先做ar x libxml2.a走出xml2a.oxml2b.o
然後做ar cr mine.a mine.o xml2a.o xml2b.o

使用最廣泛的ar命令A simple explanation,雖然我可能已經總結你會從它那裏得到這裏。

+0

這裏得出同樣的結論。 – ruipacheco

+0

@Cocoaster如果你想出更好的東西讓我知道。導致這個解決方案的工作,但男人是醜陋的,特別是在我的情況下,我必須鏈接5'.a's –

+0

不適用於我:http://stackoverflow.com/questions/20662999/static-lib- ranlib -cant-find-symbols – ruipacheco

0

對象手動合併成一個新的靜態庫實例:

ar -x libx.a 
ar -x liby.a 
ar -c libz.a *.o