模块对于 SAFESEH 映像C++不安全
module unsafe for SAFESEH image 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安全异常处理程序页面,但我找不到任何明确的答案。
我想知道是否有其他人遇到过这个问题,以及他们是否设法解决了它。
禁用项目属性 -> 配置属性 ->链接器 ->高级选项卡中的选项"图像具有安全异常处理程序"帮助了我。
从评论:
当您链接包含由早期版本的编译器创建的代码的 .obj 或 .lib 时,会发生这种情况。如果您下载了opencv_ffmpeg二进制文件而不是源代码,这当然很常见。可以关闭链接器选项,但随后仍会出现可以字节的 CRT 版本不兼容。从源代码重建库。– 汉斯·帕桑特 5 月 15 日 13:01
感谢您的帮助,它奏效了——亚伦汤普森 5 月 17 日 14:50
如果您在Visual Studio中构建ZLIB时遇到此错误,这里是解决方案。查找contribmasmx86bld_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
另一种方法是将一些SEH处理程序(例如空)添加到asm文件中并使用/safeseh
选项编译它们,然后使用编译器选项正常编译其他代码/SAFESEH:YES
然后使用编译器选项正常编译其他代码。
空的 SEH 处理程序:
.safeseh SEH_handler
SEH_handler proc
;handler
ret
SEH_handler endp
您的里程可能会有所不同,但上述建议都不适合我(尽管我没有尝试滚动自己的 asm 异常处理程序)。
所做的工作是选择构建目标 Release/x64。
我在64位机器上运行Windows 10,并使用Visual Studio 2015。
目标发布/Win32 也有效。我想最主要的是选择"发布"。
- C++/CLI 和 C#/VB 与不安全和外部有什么区别?
- 问:Apache Arrow 数组生成器不安全追加
- 不安全的 MPI 非阻塞通信示例?
- 有没有一种简单的方法来检查C++中的不安全表达式
- 为什么静态向下转换unique_ptr不安全?
- 哪些整数操作不安全
- 为什么这个递归 lambda 函数不安全?
- 解决方法:QPixmap:在GUI线程之外使用pixmap是不安全的
- 正在匹配不安全的正则线程
- 如何修复编译错误"此函数或变量可能不安全"(strcpy)
- 编译器在 const ref 类型参数上使用临时对象时是否应该警告不安全的行为?
- 实现没有不安全服务器凭据的自定义 AuthMetadataProcessor
- 什么时候关闭__strict_ansi__标志是不安全的
- 原子对象在普通对象安全的任何上下文中都是不安全的
- OpenSSL:将不安全的BIO提升为安全
- 这是对支撑初始器列表的不安全使用情况
- 从 C# 到C++和返回的数组,没有不安全的代码
- 一个线程设置成员,而另一个循环上方 - 是此螺纹 - 不安全
- 访问"std::variant"的不安全、"noexcept"和无开销方式
- 在插入时同时迭代一个映射,这在什么方面是不安全的