c++ - #error "SSE2 instruction set not enabled"包含 <emmintrin.h> 时

标签 c++ linux cmake intel sse2

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

 #error "SSE2 instruction set not enabled"

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

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

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

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

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

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

最佳答案

你需要打电话

<strike>set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} "-msse -msse2 -msse3")</strike>
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的情况下,它们总是由包含所有必需标志的字符串组成的单个值。

关于c++ - #error "SSE2 instruction set not enabled"包含 <emmintrin.h> 时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16410149/

相关文章:

在堆栈上分配对象时的 C++ 继承错误

c++ - QT - 连接 QPushButtons 和 QCheckBoxes

c++ - D3D11 : E_OUTOFMEMORY when mapping vertex buffer

c - 为什么我必须在 &ip_reply->saddr 中使用 "&"

c++ - GLUT 只是为小行星游戏画了一艘船,但无法正确移动和旋转船

javascript - 如何根据操作系统调整 html 输出?

visual-studio - Visual Studio 2013和Cmake?

c++ - CMake:对 boost 库的 undefined reference

c++ - CMake、链接目录和多个 Boost 安装

java - 在 CentOS7 上安装 Ant、JDK 和 JRE,之后仍然无法启动 .bat 文件