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

3
我正在编写一个静态库,需要处理XML。我希望它可以直接包含所有必要的内容,但我不知道如何使其他静态库链接到它,尤其是libxml2。
我将-c标志传递给gcc以生成.o文件,然后使用ar创建库。我需要传递什么神秘的标志组合来让我的静态库包含libxml2?

1
这个相关的问题和答案是否有所帮助? - Roger Rowland
1
好的,这已经是别人的答案了 - 在链接的问题中点赞即可,我所做的就是搜索。 - Roger Rowland
@RogerRowland 我已经投票将该问题标记为重复。 - ruipacheco
1
好的,做得很好 - 我也做了同样的事情。 - Roger Rowland
你的构建系统不是应该做这个吗? - ruipacheco
显示剩余2条评论
3个回答

4

库不会自动集成其他库。我能想到两种解决方案来实现你想要的目标。

  1. 在最终目标文件中链接两个库,把新库放在前面。
  2. 复制libxml2库,然后使用lib工具将你的对象添加到其中。

2
遗憾的是,对我来说最有效的方法是从静态库中提取所有的 .o,然后将它们与您的 .o 一起包含在一起,生成一个单独的 .a
因此,您可以使用 ar t libxml2.a 查看 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 命令,尽管我可能已经总结了您能够从中获得的信息。

在这里得出相同的结论。 - ruipacheco
@Cocoaster 如果你有更好的解决方案,请告诉我。因为这个解决方案虽然可行,但是实在太丑陋了,特别是在我的情况下,我需要链接5个“.a”文件。 - Jonathan Mee
对我没用:http://stackoverflow.com/questions/20662999/static-lib-ranlib-cant-find-symbols - ruipacheco
请确认一下,您是否将xml2的头文件包含在gcc编译.o的过程中了? - Jonathan Mee
我只需运行libxml2附带的Makefile。为了保险起见,我在我的代码中包含了所有libxml2的.h文件。 - ruipacheco
问题已经解决了。是我的问题,而不是链接器的问题。 - ruipacheco

0

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接