SSE2指令集未启用报错如何在GCC/G++层面全局开启?
SSE2指令集未启用报错解决方案
方案1:针对CMake项目单次生效(无需修改生成的Makefile)
不用修改CMake生成的多级Makefile,只需在执行cmake生成配置阶段传入编译参数即可:
CFLAGS="-march=native -mfpmath=sse" CXXFLAGS="-march=native -mfpmath=sse" cmake 你的其他cmake参数 ..
后续执行make编译时会自动携带上述参数,无需再做任何修改。
方案2:当前用户全局永久生效
直接将参数写入shell配置文件,后续所有编译操作都会自动携带参数,无需每次手动指定:
- 如果你使用bash,编辑
~/.bashrc文件,末尾添加以下内容:export CFLAGS="$CFLAGS -march=native -mfpmath=sse" export CXXFLAGS="$CXXFLAGS -march=native -mfpmath=sse" - 如果你使用zsh,编辑
~/.zshrc文件,添加同样的内容。
添加完成后执行source ~/.bashrc(或对应zsh配置文件)即可立即生效,后续所有编译项目(包括原生Makefile、CMake、Autoconf生成的配置)都会自动启用SSE2相关参数。
方案3:系统级全局生效
如果需要让主机上所有用户都默认生效,将上述两行export配置添加到/etc/profile或/etc/bash.bashrc文件中即可。
参数说明
- x86_64架构的64位系统默认已经开启SSE2支持,仅32位x86系统需要手动添加上述参数。
-mfpmath=sse和需求高度相关:该参数会让GCC使用SSE寄存器执行浮点数运算,配合SSE2指令集使用,相比传统x87浮点数运算性能更高、不同平台编译结果的精度一致性更好,推荐搭配SSE2相关参数一同启用。- 如果你仅需要开启SSE2指令集,不需要其他针对本机CPU的专属优化,可以将
-march=native替换为-msse2,针对性更强,兼容性更好。
内容的提问来源于stack exchange,提问作者Paramar
相关产品推荐
相关产品推荐

