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

时间:2013-05-07 02:06:01

标签: c++ linux cmake intel sse2

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

 #error "SSE2 instruction set not enabled"

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

根据维基百科,赛扬双核能够执行SSE2指令,并且根据/proc/cpuinfo设置sse2标志。但this question的作者提到英特尔赛扬的SSE支持有限。

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

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

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

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

1 个答案:

答案 0 :(得分:5)

您需要致电

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。 / p>

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

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