【问题标题】:boost-build (aka bjam) with Intel archiver command instead of ar使用英特尔归档器命令而不是 ar 的 boost-build(又名 bjam)
【发布时间】:2015-06-18 17:12:42
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c++ bjam boost-build icc


    【解决方案1】:

    我不得不侵入 boost-build 的内部结构来完成这项工作。如果你需要这个功能,你也可以破解它!

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

    actions piecemeal archive
    {
        "xiar" $(AROPTIONS) rc "$(<)" "$(>)"
        "ranlib" "$(<)"
    }
    

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

    如果您不使用 Linux,您可以将相同的逻辑移至 intel-win.jam

    我相信 boost-build 在使用 ar 的假设中是有缺陷的,即使使用 intel 编译器也是如此,因此这可能很快会成为 boost-build 的错误修复请求。我不确定我是否有最好的解决方案,但总比没有好。

    添加&lt;archiver&gt; 功能会更好。谷歌搜索结果中提到了这样的事情,但在 boost-build(2011 和 2014 版本之间)中绝对不存在。显然 boost-build 能够实现这样的事情。但我缺乏使用非常令人困惑的果酱语言的技能来实现这一点。如果你有这样的技能,请分享。

    【讨论】:

      猜你喜欢
      • 2017-01-22
      • 1970-01-01
      • 2011-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多