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

Aar*_*son 85 c++ visual-studio visual-c++

我正在使用Microsoft Visual Studio 2011 Professional Beta

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

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

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

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

我想知道是否有其他人有这个问题,如果他们设法解决它.

Zhe*_*nya 137

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

  • 这对我没有影响. (3认同)
  • 成功,VS 2015 (2认同)
  • VS 2017成功 (2认同)

Bo *_*son 60

来自评论:

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


Nay*_*iya 10

如果在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
Run Code Online (Sandbox Code Playgroud)

ml /safeseh /coff /Zi /c /Flmatch686.lst match686.asm
ml /safeseh /coff /Zi /c /Flinffas32.lst inffas32.asm
Run Code Online (Sandbox Code Playgroud)


Dit*_*Sky 8

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

空SEH处理程序:

.safeseh SEH_handler

SEH_handler   proc
;handler
ret

SEH_handler   endp
Run Code Online (Sandbox Code Playgroud)

  • 任何与zlib有相同问题的人都会看到这个(CTRL + F safeseh)http://www.tannerhelland.com/5076/compile-zlib-winapi-wapi-stdcall/ (2认同)