linux - 库名包含空格时如何组合多个静态库?
问题描述
我正在研究各种风格的 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'
如何才能做到这一点?
解决方案
我不知道是否可以在 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
推荐阅读
- swift - 快速更改弹出框的宽度
- asp.net - ASP.Net Core 3.1 MVC 自定义标签助手条件属性始终为 false
- kotlin - 在 Kotlin 中使用包裹在 {} 中的类和包裹在 () 中的类有什么区别
- html - 无法在 Atag 中获取字符串
- c++ - 构造函数采用 std::string_view vs std::string 并移动
- python - 脚本在执行期间停止
- javascript - Stryker 和 Jest 的麻烦
- mysql - 慢 MySQL 查询 (mySQLdump)
- reactjs - 无法使用酶在反应路由器中测试重定向
- swift - 与 Vapor 4 的父子关系