You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行mingw32-make编译OpenCV3.4.1时遇.seh_savexmm无效寄存器错误求助

解决MinGW32-make编译OpenCV 3.4.1时的.seh_savexmm汇编错误

这个问题我碰到过好多次,本质是MinGW GCC版本与OpenCV 3.4.1的SEH(结构化异常处理)指令生成逻辑不兼容导致的。下面是几个亲测有效的解决办法,按优先级排序:

方法1:降级MinGW GCC版本

OpenCV 3.4.1是2018年的老版本,新的MinGW GCC(比如9.x及以上版本)在生成SEH相关汇编指令时,使用的寄存器规则和旧版OpenCV的代码不匹配,才会抛出“无效寄存器”的错误。

建议你切换到GCC 7.x或8.x版本的MinGW-W64(比如7.3.0版本),这个版本和OpenCV 3.4.1的兼容性拉满,基本不会出现这类汇编层面的问题。

方法2:禁用SEH编译(无需换编译器)

如果不想折腾换编译器,可以在CMake配置阶段强制关闭SEH,改用SJ异常处理:

  • 如果你用CMake GUI:在CMAKE_C_FLAGS和CMAKE_CXX_FLAGS里分别添加-fno-seh
  • 如果你用命令行CMake:直接加上参数:
    cmake -D CMAKE_C_FLAGS="-fno-seh" -D CMAKE_CXX_FLAGS="-fno-seh" [你的OpenCV源码路径]
    

另外,也可以尝试关闭SSE优化(虽然可能会损失一点性能,但能快速解决问题):

cmake -D ENABLE_SSE=OFF [你的OpenCV源码路径]

配置完成后,清空之前的build目录,重新运行mingw32-make即可。

方法3:修改OpenCV源码(进阶方案)

如果上面两个方法都不行,你可以定位到报错的汇编对应的C++代码(一般是在OpenCV的SSE优化模块里),找到生成.seh_savexmm指令的代码段,注释掉或者替换成MinGW兼容的写法。不过这个方法需要你有一定的汇编和源码阅读能力,所以只推荐给有经验的开发者。


内容的提问来源于stack exchange,提问作者Campigone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:14:27