首页 > 解决方案 > 库名包含空格时如何组合多个静态库?

问题描述

我正在研究各种风格的 Linux,我需要组合多个静态库,例如

foo1.a
foo bar.a
foo2.a

到一个单一的组合静态库中(请注意,第二个文件的名称中有一个空格)。

我看过解释如何使用ar mri脚本执行此操作的 stackoverflow 文章。建议是创建一个名为的文件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'

如何才能做到这一点?

标签: linuxstatic-librariesunix-ar

解决方案


我不知道是否可以在 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

https://linux.die.net/man/1/ar


推荐阅读