模块不安全的SAFESEH图像C ++

时间:2012-05-15 11:41:10

标签: c++ visual-studio visual-c++

我正在使用Microsoft Visual Studio 2011专业版测试版

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

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

  

错误LNK2026:SAFESEH映像的模块不安全。

显然这些文件在opencv_ffmpeg项目中,但我找不到它们,我已经看过Microsoft帮助页面上的safeseh Safe Exception Handlers页面,但我找不到任何确定的答案。

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

5 个答案:

答案 0 :(得分:132)

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

答案 1 :(得分:59)

来自评论:

  

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

答案 2 :(得分:9)

如果在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

答案 3 :(得分:8)

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

清空SEH处理程序:

.safeseh SEH_handler

SEH_handler   proc
;handler
ret

SEH_handler   endp

答案 4 :(得分:0)

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

选择构建目标Release / x64的工作是什么。

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

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