VC++ | VS2017编译工程报错
1>Win32vc.obj : error LNK2026: 模块对于 SAFESEH 映像是不安全的。
1>Release\IDTools.exe : fatal error LNK1281: 无法生成 SAFESEH 映像。
1>已完成生成项目“IDTools.vcxproj”的操作 - 失败。
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
1>Win32vc.obj : error LNK2026: 模块对于 SAFESEH 映像是不安全的。
1>Release\IDTools.exe : fatal error LNK1281: 无法生成 SAFESEH 映像。
1>已完成生成项目“IDTools.vcxproj”的操作 - 失败。
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
这个错误是由于工程中某一个源文件被编译成了不支持SAFESEH的目标文件,导致最终链接生成的可执行文件也无法使用SAFESEH。要解决这个问题,您可以采取以下两种方法:
在项目属性中禁用SAFESEH
打开项目属性(右键点击项目,选择“属性”),依次展开链接器(Linker)->高级(Advanced)选项卡,在其中将“启用安全异常处理(Enable Safe Exception Handling)”选项设置为否(No),然后重新编译工程即可。
编译所有源文件时启用SAFESEH
在工程中启用SAFESEH的方法是,在所有源文件中都添加如下代码:
#pragma set(SEH, on)
或者在项目属性中,将C/C++ -> 代码生成(Code Generation)选项页中的安全检查(Security Check)选项设置为“启用快速失败模式”(/GS-),并重新编译工程即可。
请注意,如果您选择第一种方法禁用SAFESEH,则可能会导致可执行文件存在安全漏洞。因此,建议您尽量使用第二种方法启用SAFESEH,并针对代码中的每一个源文件进行检查和调整,确保其能够兼容SAFESEH。