如何将两个“ar”静态库合并为一个?

新手上路,请多包涵

我有 2 个静态 Linux 库,由 ar crlibabc.alibxyz.a

我想将它们合并到一个静态库 libaz.a

我怎样才能做到这一点。

我想创建一个合并的静态库,而不是将两个库都提供给应用程序的最终链接。

原文由 osgx 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

您可以从 .a 文件中提取对象,并使用提取的 .o s 创建您的 .a 文件:

 ar -x libabc.a
ar -x libxyz.a
ar -c libaz.a  *.o

原文由 codaddict 发布,翻译遵循 CC BY-SA 2.5 许可协议

至少有 3 种 本地 方式可以做到这一点。第一种也是最便携的方法是使用 libtool。在也使用 libtool 构建了其他库之后,您可以通过将 .la 库添加到 automake libaz_la_LIBADD 变量来组合它们,或者直接从 Makefile 中添加类似的内容:

 libtool --mode=link cc -static -o libaz.la libabc.la libxyz.la

其他两个至少在使用 GNU ar 时可用。您可以使用 MRI 脚本(例如命名为 libaz.mri),例如:

 create libaz.a
addlib libabc.a
addlib libxyz.a
save
end

然后执行 ar 为:

 ar -M <libaz.mri

或者您可以使用 精简 存档(选项 -T ),这将允许添加其他存档而不将它们嵌套在其中,尽管缺点是如果您想分发静态库,分离的对象将丢失:

 ar -rcT libaz.a libabc.a libxyz.a

上述所有方法都可以优雅地处理来自原始档案的重叠成员名称。

否则,您必须解压缩到不同的目录并再次重新打包,以避免替换重叠的成员名称:

 mkdir abc; cd abc; ar -x ../libabc.a
mkdir xyz; cd xyz; ar -x ../libxyz.a
ar -qc libaz.a abc xyz

原文由 Guillem Jover 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题