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

Linking static lib with other static libs

本文关键字:静态 链接 其他      更新时间:2023-10-16

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

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

图书馆不会吞噬其他库。 我能想到的有两种解决方案可以做你想做的事。

  1. 与最终目标中的两个库链接,指定新的首先是图书馆。
  2. 复制 libxml2 库,只需使用 lib 工具以将对象添加到其中。

可悲的是,对我来说最有效的是从静态库中提取所有.o,然后将它们包含在您的.o中以制作单个.a

因此,您可以ar t libxml2.a
查看libxml2.a的内容为简单起见,假设它只包含:xml2a.oxml2b.o
您想将这些与mine.o结合起来以制作mine.a

你需要先做ar x libxml2.a才能出去xml2a.o xml2b.o
然后做ar cr mine.a mine.o xml2a.o xml2b.o

对最广泛使用的ar命令的简单解释,尽管我可能已经总结了您从中得到的内容。

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

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