我正在研究各种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'
这怎么办?
答案 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
修饰符。