我有 2 个静态 Linux 库,由 ar cr
、 libabc.a
和 libxyz.a
。
我想将它们合并到一个静态库 libaz.a
。
我怎样才能做到这一点。
我想创建一个合并的静态库,而不是将两个库都提供给应用程序的最终链接。
原文由 osgx 发布,翻译遵循 CC BY-SA 4.0 许可协议
我有 2 个静态 Linux 库,由 ar cr
、 libabc.a
和 libxyz.a
。
我想将它们合并到一个静态库 libaz.a
。
我怎样才能做到这一点。
我想创建一个合并的静态库,而不是将两个库都提供给应用程序的最终链接。
原文由 osgx 发布,翻译遵循 CC BY-SA 4.0 许可协议
至少有 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 许可协议
1 回答1.3k 阅读✓ 已解决
3 回答910 阅读✓ 已解决
1 回答739 阅读✓ 已解决
1 回答1.5k 阅读
1 回答890 阅读✓ 已解决
2 回答677 阅读✓ 已解决
2 回答736 阅读✓ 已解决
您可以从
.a
文件中提取对象,并使用提取的.o
s 创建您的.a
文件: