将静态库与其他静态库链接

时间:2013-12-18 12:45:25

标签: c++ gcc linker libxml2 ar

我正在编写一个需要处理XML的静态库。我希望它包含开箱即用的所有内容,但我不知道如何使其他静态库链接到它,即libxml2。

我将-c标志传递给gcc以生成.o ar然后用来创建lib。我必须传递什么魔法标志组合才能让我的静态lib吞下libxml2?

3 个答案:

答案 0 :(得分:4)

库不只是吞下其他库。有两种解决方案可以做你想要的,我能想到的。

  1. 链接指定新目标的最终目标中的两个库 图书馆第一。
  2. 复制libxml2库并使用lib工具 将对象添加到其中。

答案 1 :(得分:1)

可悲的是,对我来说最有效的方法是从静态库中提取所有.o,然后将其与.o一起包含在一个.a

因此,您可以使用libxml2.a来查看ar 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

A simple explanation使用最广泛的ar命令,虽然我可能总结了你从这里获得的内容。

答案 2 :(得分:0)

手动将对象合并到一个新的静态库实例中:

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