#error & quot; Набор инструкций SSE2 не включен & quot; при включении & lt; emmintrin.h & gt;

Я пытаюсь скомпилировать код C ++ с помощью cmake и сделать так, чтобы он использовал <emmintrin.h> и получите следующую ошибку make:

 #error "SSE2 instruction set not enabled"

У меня есть двухъядерный процессор Intel Celeron с системой Linux (Mint) (Kernel 3.5).

Согласно Википедии, Celeron Dual Core способен выполнять инструкции SSE2, а флаг sse2 устанавливается в соответствии с /proc/cpuinfo, Но автор этот вопрос упоминает ограниченную поддержку SSE Intel Celeron.

Я уже пытался использовать параметры компилятора SSE в моем CMakeLists.txt:

set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} "-msse -msse2 -msse3")

..но ничего не изменилось. cmake . работает нормально но make выдает сообщение об ошибке выше.

Нужно ли менять настройки в CMakeLists.txt или Celeron Dual Core просто не (полностью) поддерживает SSE2?

3

Решение

Вам нужно позвонить

set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} "-msse -msse2 -msse3")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse -msse2 -msse3")

CMAKE_C_FLAGS применяются к файлам C, и из тега C ++ вашего поста, я полагаю, вы компилируете файлы C ++, поэтому необходимо изменить CMAKE_CXX_FLAGS вместо.

Что касается позиционирования кавычек; в исходной версии вы настраивали CMAKE_C_FLAGS содержать 2 отдельные записи, первая из которых является начальным значением CMAKE_C_FLAGS а вторая строка "-msse -msse2 -msse3",

CMake содержит списки, подобные этим, в виде записей, разделенных точкой с запятой. В случае CMAKE_<lang>_FLAGS, неизменно они представляют собой одно значение, состоящее из строки, содержащей все необходимые флаги.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]