错误 lnk2026:模块对于safeseh图像不安全

54

在构建一个Visual C++示例项目时,我遇到了这个错误。 首先,我下载了三个示例项目,它们都解决同一个问题:打印出所有小于N的质数(您可能了解这些示例项目?)。我成功地构建了纯C项目,没有任何问题。但是,当我尝试构建基于汇编的项目时,就会出现这个错误。

谢谢。


2
尝试禁用SAFESEH。 - Leo Chapiro
12
我需要一分钟在菜单中找到它,这是路径:项目属性 | 配置属性 | 链接器 | 高级选项 | 映像具有安全异常处理(列表中的最后一项) - Wade Hatler
3个回答

93

在 Visual Studio 2012 Express 版本中:

Right-click on your project ->
Properties -> 
Configuration Properties ->
Linker ->
Advanced and changed "Image Has Safe Exception Handlers" to "No (/SAFESEH:NO)"

47

对于 /SAFESEH:NO 链接器设置,一张图片胜过 0x3e8(1000)个单词:

enter image description here

或者,如果你知道汇编代码不包含异常处理程序或所有异常处理程序都使用了 .SAFESEH,则可以告诉 MASM 提供保证:这将允许你在项目链接时保持启用 /SAFESEH。但是,你要确保提供的保证是正确的,否则请使用第一个选项。

enter image description here


40
Try to disable SAFESEH.

来自规范:/SAFESEH被指定了,但模块与安全异常处理功能不兼容。


1
我明白了,谢谢! 但是每个基于汇编的模块都不安全吗? 在哪里可以查找安全模块的标准? - Hoai Dam
4
请看这篇文章:http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/ec2b66ec-f1a3-49fb-a8df-329965239284/ HTH - Leo Chapiro
@LeoChapiro 谢谢!从那里(Mike Danes):「但似乎很容易让masm生成一个safeseh对象文件,只需将Use Safe Exception Handler MASM属性设置为Yes(请参见项目属性,Microsoft Macro Assembler,高级)。•此外,请参阅此处的.safeseh MASM指令:https://learn.microsoft.com/en-us/cpp/assembler/masm/dot-safeseh?view=msvc-150,但可能您不需要它,因为您的汇编代码实际上并不包含任何异常处理程序。」(链接已修复) - mirabilos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接