我正在开发各种风格的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'
如何才能做到这一点?
我不知道是否可以在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命令中删除了修饰符。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。