2017-01-01 122 views
0

我试图编译升压日志库,我不断从dump_avx2.cpp文件错误编译Boost.Log

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为Boost.Log子模块从GitHub库为获取(https://github.com/boostorg/boost

有谁知道我能解决这个问题吗?我使用的是C++编译器14和建设,这是我所得到的,当我键入g++ --version

Apple LLVM version 8.0.0 (clang-800.0.42.1) 

谢谢!

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

注意似乎有是两个相关的源文件dump_ssse3.cpp和提到dump_avx2.cpp文件,我必须编译只是其中之一?我真搞不懂怎么从的Jamfile在build文件夹:(

回答

1

这看起来像铛(LLVM)的错误。首先,内在属于AVX2,不SSE4.2做的。其次,整个dump_avx2.cpp文件编译时使用了-mavx2,因此所需的扩展功能已启用,您可以在b2错误消息中看到编译器开关,编号为dump_ssse3.cppdump_avx2.cpp应该被编译。选择正确的实现

+0

对不起,我不认为我遵循你所说的:(对于不编译的东西的问题的解决方案是什么? – Curious

+0

将问题报告给编译器开发人员。除非你想修改它。如果你这样做,你应该修改'libs/log/build/Jamfile.v2'文件,'avx2-targets-cond'规则。注释或删除第一行和最后一行以外的内容(即规则应返回'否')。这将从建筑物中排除图书馆的AVX2部分。 –

+0

最后一件事,所以如果我建立没有'dump_avx2.cpp'文件的库,那么它会像平常一样工作,没有任何副作用? – Curious