使用VS2012编译libffi失败,提示致命错误LNK1281: 无法生成SAFESEH映像。

10

使用VS11编译libffi时会出现以下链接器错误。

libffi\libffi-3.0.9\ms\Win32\Debug\ffi.dll : fatal error LNK1281: Unable to generate SAFESEH image.

同一个项目在使用VS10编译时编译正常,但在自动升级到VS2012后开始出现链接错误。

MSDN中的解释过于晦涩难懂,没有什么帮助。

我可能会使用/SAFESEH:NO重新构建,但我不确定其影响。

请指示可能出现的问题。

1个回答

21
没有使用 SAFESEH 的主要影响是您的应用程序将无法被接受到 Windows 8 商店,或者Windows 8 桌面认证。如果这对您不是问题,那么请随意使用 /SAFESEH:NO文档中说:
“链接器无法生成映像的最常见原因是链接器的一个或多个输入文件(模块)与安全异常处理程序功能不兼容。导致模块与安全异常处理程序不兼容的常见原因是使用 Visual C++ 的早期版本编译器创建了该模块。”
项目升级到 VS2012 后是否有可能将设置更改为 /SAFESEH:YES。也许你一直没有使用 SAFESEH 进行构建。

非常感谢你,你是我的救星。顺便问一下,你知道这个是否有文档记录吗?“没有SAFESEH的主要影响是您的应用程序将无法被Windows 8商店接受。如果这对您不是问题,那么您应该使用/SAFESEH:NO。” - Abhijit
我认为你不会找到任何关于那个的文档。你可以很容易地发现Windows 8商店需要SafeSEH。但是它是否是主要影响,这将不会被写在任何地方,并且在很大程度上是一个观点问题。SafeSEH已经存在了很长时间。许多编译器甚至无法生成所需的异常表。当然,它正在消失,因为它只对32位应用程序有意义。编写64位应用程序,您的可执行文件必须包含异常表。 - David Heffernan
1
谢谢!我喜欢在StackOverflow上搜索并找到与我的问题完全匹配的答案! - cplotts

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