开发者社区> 问答> 正文

库名称包含空格时,如何合并多个静态库?

我正在开发各种风格的Linux,并且需要组合多个静态库,例如

foo1.a foo bar.a foo2.a 放入一个单一的组合静态库中(请注意,第二个文件的名称中有一个空格)。

我看过stackoverflow文章,这些文章解释了如何使用ar mri脚本执行此操作。建议创建一个名称如下的文件combine.ar:

CREATE comboLib.a
ADDLIB foo1.a
ADDLIB foo bar.a
ADDLIB foo2.a
VERBOSE
SAVE

END 然后使用命令ar -M < combine.ar。

但是,ar脚本语言将空格视为添加两个项目的一种方式,因此它将第二行视为添加库foo和库bar.a。

我没有运气尝试过以下

ADDLIB "foo bar.a"
ADDLIB foo\ bar.a
ADDLIB 'foo bar.a'

如何才能做到这一点?

展开
收起
祖安文状元 2020-01-06 15:18:53 424 0
1 条回答
写回答
取消 提交回答
  • 我不知道是否可以在MRI脚本中使用带空格的文件名。您可以将库文件重命名或符号链接为foo bar.a没有空格的名称,这是一种简单的解决方法。

    如果您不坚持使用MRI脚本,则可以使用一系列ar命令来执行此操作。

    以下脚本假定所有库文件都在同一目录中,并且临时目录与其他目录没有冲突。

    for lib in foo1.a 'foo bar.a' foo2.a
    do
      rm -rf tmpdir   # make sure we do not have any existing file
      mkdir tmpdir    # place to extract members
      cd tmpdir
      # x = extract all memebers, o = keep original file date
      ar xo ../"$lib"
      # r = add/replace member, c = create archive without warning
      ar rc ../comboLib.a *
    done
    rm -rf tmpdir     # clean up
    
    

    编辑:由于现代系统不需要ranlib,我s从ar r命令中删除了修饰符。

    2020-01-06 15:19:06
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载