【问题标题】:archive of archive files [duplicate]存档文件的存档[重复]
【发布时间】:2012-09-20 17:51:03
【问题描述】:

可能重复:
How to merge two “ar” static libraries into one

我有多个存档文件如下

folder1/libfolder1.a
folder2/libfolder2.a
folder3/libfolder3.a

所有这些库都有一堆 obj 文件。

我想为所有这些库创建一个存档。

ar -rcs libGlobal.a folder1/libfolder1.a folder2/libfolder2.a folder3/libfolder3.a 

但它不起作用。它说我需要提取所有这些 .a 文件,一旦我拥有所有这些 obj 文件,我可以像下面那样做

ar -rcs `ls *.o`

但我不想做所有这些讨厌的事情。我想要明确的解决方案,例如

ar -rcs libGlobal.a `ar -x folder1/libfolder1.a` `ar -x folder2/libfolder2.a` `ar -x folder3/libfolder3.a`

我想要的解决方案与此类似,因为我在此示例中给出的文件夹结构并不是那么简单。

任何帮助将不胜感激

【问题讨论】:

  • IIRC,一旦.o 文件在.a 库中,它们的相对路径无论如何都不再重要,所以我认为保留它们并不特别重要......
  • 感谢 chepner,但该讨论也以无效的解决方案告终。
  • 感谢 twalberg,问题是我想要明确的解决方案,所以包括所有库包含。理想情况下,解决方案 ar -rcs libGlobal.a ar -x folder1/libfolder1.a ar -x folder2/libfolder2.a ar -x folder3/libfolder3.a 应该可以工作。但由于某种原因它不起作用
  • 怎么不工作了?是否无法从现有档案中提取?档案之间是否有文件名冲突(libfolder1.a 中的foo.ofoo.o 中的libfolder2.a 覆盖,因为未存储路径名)?是否无法创建新存档?

标签: linux static-libraries unix-ar


【解决方案1】:

虽然它没有被表达为单个命令,但这应该可以工作:

pushd folder1; ar -x libfolder1.a; popd
pushd folder2; ar -x libfolder2.a; popd
pushd folder3; ar -x libfolder3.a; popd
ar -rcs libGlobal.a folder1/*.o folder2/*.o folder3/*.o
rm folder1/*.o folder2/*.o folder3/*.o

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-09
    • 2018-10-29
    • 2012-11-05
    • 2013-03-01
    相关资源
    最近更新 更多