90

我正在使用 Microsoft Visual Studio 2011 Professional Beta

我正在尝试运行我使用 cMake 和 Visual Studio 编译器编译的 OpenCV C++ 文件 ( http://opencv.willowgarage.com/wiki/Welcome )。

然而,当我去调试项目时,我得到了 600 多个错误,其中大部分是:

错误 LNK2026:模块对 SAFESEH 图像不安全。

显然这些文件在 opencv_ffmpeg 项目中,但我找不到它们,我查看了 Microsoft 帮助页面上的 safeseh 安全异常处理程序页面,但我找不到任何明确的答案。

我想知道是否有其他人遇到过这个问题,以及他们是否设法解决了这个问题。

4

5 回答 5

153

在项目属性-> 配置属性-> 链接器-> 高级选项卡中禁用选项“图像具有安全异常处理程序”对我有帮助。

于 2013-11-03T16:36:08.377 回答
65

从评论:

当您链接包含由早期版本的编译器创建的代码的 .obj 或 .lib 时,会发生这种情况。如果您下载了 opencv_ffmpeg 的二进制文件而不是源代码,这当然很常见。您可以关闭链接器选项,但您仍然会遇到可以字节的 CRT 版本不兼容性。从源代码重建库。– Hans Passant 5 月 15 日 13:01  
 
感谢您的帮助,它奏效了 – Aaron Thompson 5 月 17 日 14:50

于 2012-10-19T18:51:16.020 回答
17

如果您在 Visual Studio 中构建 ZLIB 时遇到此错误,这里是解决方案。查找contrib\masmx86\bld_ml32.bat并添加/safeseh为选项

ml /coff /Zi /c /Flmatch686.lst match686.asm
ml /coff /Zi /c /Flinffas32.lst inffas32.asm

ml /safeseh /coff /Zi /c /Flmatch686.lst match686.asm
ml /safeseh /coff /Zi /c /Flinffas32.lst inffas32.asm
于 2017-11-27T10:03:34.690 回答
11

另一种方法是在 asm 文件中添加一些 SEH 处理程序(例如为空)并使用/safeseh选项编译它们,然后使用编译器选项正常编译其他代码/SAFESEH:YES

空 SEH 处理程序:

.safeseh SEH_handler

SEH_handler   proc
;handler
ret

SEH_handler   endp
于 2014-09-10T16:48:43.120 回答
0

您的里程可能会有所不同,但上述建议都不适合我(尽管我没有尝试滚动我自己的 asm 异常处理程序)。

起作用的是选择构建目标 Release/x64。

我在 64 位机器上运行 Windows 10,并使用 Visual Studio 2015。

目标 Release/Win32 也可以。我想主要是选择“发布”。

于 2017-05-15T18:38:06.340 回答