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

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

  #error "SSE2 instruction set not enabled" 

我有一个带有Linux(Mint)系统(内核3.5)的英特尔赛扬双核处理器。

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

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

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

..但没有任何改变。 cmake . 工作正常,但给上面的错误信息。

是否必须更改CMakeLists.txt中的设置,或者赛扬双核是否完全支持SSE2?

Solutions Collecting From Web of "包含<emmintrin.h>时,#error“SSE2指令集未启用”"

你需要打电话

 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的情况下,它们总是由包含所有必需标志的字符串组成的单个值。