包含<emmintrin.h>时,#error"SSE2指令集未启用"

Suz*_*ana 4 c++ linux intel cmake sse2

我正在尝试使用cmake编译一些C++代码并使用include来<emmintrin.h>获取以下make错误:

 #error "SSE2 instruction set not enabled"
Run Code Online (Sandbox Code Playgroud)

我有一个带有Linux(Mint)系统的Intel Celeron双核处理器(内核3.5).

根据维基百科,赛扬双核能够执行SSE2指令,并根据sse2标志设置/proc/cpuinfo.但是这个问题的作者提到了英特尔赛扬的有限SSE支持.

我已经尝试在我的中使用SSE编译器选项CMakeLists.txt:

set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} "-msse -msse2 -msse3")
Run Code Online (Sandbox Code Playgroud)

..但没有改变.cmake .工作正常,但make上面给出了错误信息.

我是否必须更改CMakeLists.txt中的设置或者Celeron Dual Core是否(完全)支持SSE2?

Fra*_*ser 5

你需要打电话

set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} "-msse -msse2 -msse3")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse -msse2 -msse3")
Run Code Online (Sandbox Code Playgroud)

CMAKE_C_FLAGS被应用到C文件,并从您的文章的C++代码,我想你是编译的C++文件,因此需要改变CMAKE_CXX_FLAGS来代替.

至于引号的定位; 在原始版本中,您设置CMAKE_C_FLAGS为包含2个单独的条目,第一个是起始值CMAKE_C_FLAGS,第二个是字符串"-msse -msse2 -msse3".

CMake将这样的列表保存为分号分隔条目.在这种情况下CMAKE_<lang>_FLAGS,它们总是由包含所有必需标志的字符串组成的单个值.