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

时间:2019-07-03 16:32:58

标签: linux static-libraries ar

我正在研究各种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'

这怎么办?

1 个答案:

答案 0 :(得分:3)

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