Ошибка компиляции Boost.Log

Я пытаюсь скомпилировать библиотеку журналов повышения, и я продолжаю получать эту ошибку из файла 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 для подмодуля Boost.Log, как было получено. из репозитория github (https://github.com/boostorg/boost)

Кто-нибудь знает, как я могу решить эту проблему? Я строю с помощью компилятора С++ 14, и вот что я получаю, когда набираю g++ --version

Apple LLVM version 8.0.0 (clang-800.0.42.1)

Спасибо!

Примечание Я должен уточнить, что в этом контексте требуется, чтобы я скомпилировал эту библиотеку отдельно.

Примечание Похоже, что есть два связанных исходных файла dump_ssse3.cpp и упомянутый файл dump_avx2.cpp, должен ли я компилировать только один из них? Я не могу понять, что делать с Jamfile в папке build :(


person Curious    schedule 01.01.2017    source источник


Ответы (1)


Это похоже на ошибку в clang (LLVM). Во-первых, внутренняя часть принадлежит AVX2, а не SSE4.2. Во-вторых, весь файл dump_avx2.cpp скомпилирован с параметром -mavx2, поэтому необходимые расширения включены. Вы можете увидеть переключатели компилятора в сообщении об ошибке из b2. И нет, и dump_ssse3.cpp, и dump_avx2.cpp должны быть скомпилированы. Библиотека во время выполнения обнаруживает доступные инструкции в ЦП и выбирает правильную реализацию.

person Andrey Semashev    schedule 01.01.2017
comment
Извините, я не думаю, что понимаю то, что вы сказали :( каково решение проблемы некомпилируемых вещей? - person Curious; 02.01.2017
comment
Сообщите о проблеме разработчикам компилятора. На стороне библиотеки нет разрешения, если вы не хотите его изменить. Если вы это сделаете, вы должны изменить libs/log/build/Jamfile.v2 файл, правило avx2-targets-cond. Закомментируйте или удалите его содержимое, кроме первой и последней строк (т. е. правило должно возвращать <build>no). Это исключит из сборки часть библиотеки AVX2. - person Andrey Semashev; 02.01.2017
comment
И последнее: если я соберу библиотеку без файла dump_avx2.cpp, будет ли она работать как обычно без каких-либо побочных эффектов? - person Curious; 02.01.2017
comment
Да, функционал не пострадает. Вы только немного потеряете производительность манипулятора dump. - person Andrey Semashev; 02.01.2017