2013-12-18 144 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