在没有 AVX 的情况下编译 boost

Posted

技术标签:

【中文标题】在没有 AVX 的情况下编译 boost【英文标题】:Compiling boost without AVX 【发布时间】:2018-03-05 20:23:29 【问题描述】:

在支持 AVX 的机器上编译 Boost 没有 AVX/AVX2 的正确方法是什么?

操作系统:Ubuntu 编译器 GCC 5.4 升压版本:1.66

【问题讨论】:

您可能希望将 GCC 选项 march 设置为非原生的。 【参考方案1】:

默认情况下,编译器会生成不需要 AVX/AVX2 的代码,而 Boost 默认情况下也不需要 AVX/AVX2。所以,你不需要做任何事情来使编译后的代码与缺少 AVX 的 CPU 兼容。

请注意,这并不意味着根本不会生成 AVX 指令。在某些地方,Boost 库执行 CPU 功能的运行时检测,并且仅在可用时使用 AVX。例如,Boost.Log 就是这样做的。

【讨论】:

谢谢,实际上它确实询问了 AVX 指令,即使处理器不支持 AVX,而且我在 Boost.Log 中的 AVX 指令处遇到非法指令错误 如果编译器生成了 AVX 指令,那么它一定是被要求的,或者它包含一个错误。首先,确保编译器参数不启用 AVX。您可以通过将-d+2 添加到b2 命令行来做到这一点。如果您自己构建编译器,请确保默认目标不启用 AVX。接下来,请确保您没有使用 LTO,因为它在 gcc (boost.org/doc/libs/1_66_0/libs/log/doc/html/log/…) 中已损坏。

以上是关于在没有 AVX 的情况下编译 boost的主要内容,如果未能解决你的问题,请参考以下文章

ubuntu下编译boost

mac下编译 boost编译工具b2

windows下编译Boost库

linux下编译安装boost库

linux下编译Boost库

windows(msvc)下编译boost库