我正在尝试编译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中找出要做的事情:(
答案 0 :(得分:1)
这看起来像是clang(LLVM)中的错误。首先,内在属于AVX2,而不是SSE4.2。其次,整个dump_avx2.cpp
文件使用-mavx2编译,因此启用了所需的扩展。您可以在b2的错误消息中看到编译器切换。不,应编译dump_ssse3.cpp
和dump_avx2.cpp
。该库会对CPU中的可用指令进行运行时检测,并选择正确的实现。