编译Boost.Log

时间:2017-01-01 00:18:31

标签: c++ boost compiler-errors boost-log

我正在尝试编译boost日志库并且我不断从dump_avx2.cpp文件中获取此错误

error: always_inline function '_mm256_set1_epi32' requires target feature 'sse4.2', but would be inlined into function 'dump_data_avx2' that is compiled without support for 'sse4.2'
boost/boost/libs/log/src/dump_avx2.cpp:71:31: note: expanded from macro 'BOOST_LOG_AUX_MM_CONSTANTS'
    const __m256i mm_char_0 = _mm256_set1_epi32(0x30303030);\
                              ^

我收到了很多与上面的错误非常类似的错误,它们都有相同的错误消息但文件中的位置不同,以供参考我在提交散列68701167a1020b0b4c47b76e31d3a3da9e2faf3f上从github repo(https://github.com/boostorg/boost)获取的Boost.Log子模块

有谁知道如何解决这个问题?我正在构建一个C ++ 14编译器,这是我输入g++ --version

时得到的
Apple LLVM version 8.0.0 (clang-800.0.42.1)

谢谢!

注意我应该澄清,在这种情况下,我需要单独编译这个库。

注意似乎有两个相关的源文件dump_ssse3.cpp和提到的dump_avx2.cpp文件,我是否只需编译其中一个?我无法从build文件夹中的Jamfile中找出要做的事情:(

1 个答案:

答案 0 :(得分:1)

这看起来像是clang(LLVM)中的错误。首先,内在属于AVX2,而不是SSE4.2。其次,整个dump_avx2.cpp文件使用-mavx2编译,因此启用了所需的扩展。您可以在b2的错误消息中看到编译器切换。不,应编译dump_ssse3.cppdump_avx2.cpp。该库会对CPU中的可用指令进行运行时检测,并选择正确的实现。