【问题标题】:Linking static lib with other static libs [duplicate]将静态库与其他静态库链接[重复]
【发布时间】:2014-01-06 15:50:00
【问题描述】:

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

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

【问题讨论】:

  • @RogerRowland - 确实如此。你能把它作为答案让我接受吗?
  • 嗯,这已经是其他人的答案了 - 只需在链接的问题中投票,我所做的就是搜索。
  • @RogerRowland 我已投票决定将问题作为重复问题结束。
  • 好动作 - 我也这样做了。

标签: c++ gcc linker libxml2 unix-ar


【解决方案1】:

库不只是吞并其他库。有两种解决方案可以做我能想到的事情。

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

【讨论】:

    【解决方案2】:

    可悲的是,对我来说最有效的方法是从静态库中提取所有 .os,然后将它们包含在您的 .os 中以生成单个 .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

    A simple explanation 最广泛使用的ar 命令,不过我可能已经总结了你会从这里得到什么。

    【讨论】:

    • 在这里得出同样的结论。
    • @Cocoaster 如果您想出更好的方法,请告诉我。因为这个解决方案有效,但它很难看,特别是在我必须链接 5 .as 的情况下
    • 只是为了确认一下,您将 xml2 的标头包含在您的 .o 的 gcc 编译中,对吗?
    • 我只是运行libxml2自带的Makefile。为了安全起见,我在代码中包含了 libxml2 的所有 .h 文件。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-19
      • 1970-01-01
      • 2013-09-03
      • 1970-01-01
      • 2015-02-25
      相关资源
      最近更新 更多