首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >boost-build (也称为bjam),使用Intel archiver命令而不是ar

boost-build (也称为bjam),使用Intel archiver命令而不是ar
EN

Stack Overflow用户
提问于 2015-06-19 01:12:43
回答 1查看 385关注 0票数 1

当我在英特尔编译器中使用boost-build时,使用内置的“英特尔”工具,它在将源代码编译为目标文件时使用icpc,但使用ar来创建.a静态库。通常这是非常好的,因为英特尔自己的归档程序xiar主要是ar的包装器。

但是,当我在大型应用程序中构建一些(但不是全部)库/模块时,我尝试使用英特尔的“过程间优化”(-ipo)选项。我希望它在库/模块内优化,而不是在库/模块之间优化。为此,我必须在制作.a文件时使用xiarxild -lib,因为ar无法理解icpc -ipo创建的.o文件。它认为它成功了,但它生成的.a将在链接阶段失败。

如何将boost-build用于创建归档的命令从默认的ar更改为xiar

我尝试在我的user-config.jam中的using intel语句中加入<linker> (我看到msvc内置工具支持它),但它似乎被忽略了。我不知道这会不会影响存档程序的选择。

EN

回答 1

Stack Overflow用户

发布于 2015-07-22 05:50:34

我必须破解boost-build的内部结构才能使其正常工作。如果你需要这个功能,你也可以修改它!

/usr/share/boost-build/tools/intel-linux.jam/usr/share/boost-build/src/tools/intel-linux.jam (是否存在可能取决于boost-build版本)中,将以下内容添加到文件末尾:

代码语言:javascript
复制
actions piecemeal archive
{
    "xiar" $(AROPTIONS) rc "$(<)" "$(>)"
    "ranlib" "$(<)"
}

这似乎覆盖了默认的archive (和piecemeal?)在gcc.jam中定义的操作。在这里,我显式地使用xiar而不是ar,其余的都是逐字复制的。

如果你没有使用Linux,你可以把同样的逻辑转移到intel-win.jam中。

我认为boost-build在这个假设中是有缺陷的,即使在英特尔编译器中也使用ar,所以这可能很快就会成为boost-build上的一个bug修复请求。我不确定我有最好的解决方案,但这总比没有好。

更好的做法是添加一个<archiver>特性。google搜索结果中提到了这样的事情,但boost-build ( 2011和2014版本之间)中肯定不存在这样的事情。显然,boost-build能够实现这样的功能。但我缺乏非常令人困惑的jam语言的技能,无法实现这一点。如果你有这样的技能,请分享。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30921686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档