用 VS2012 编译 libffi 失败,出现致命错误 LNK1281: Unable to generate SAFESEH image

Posted

技术标签:

【中文标题】用 VS2012 编译 libffi 失败,出现致命错误 LNK1281: Unable to generate SAFESEH image【英文标题】:Compiling libffi with VS2012 fails with fatal error LNK1281: Unable to generate SAFESEH image 【发布时间】:2013-01-31 16:08:06 【问题描述】:

用 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】:

没有SAFESEH 的主要含义是Windows 8 商店或Windows 8 desktop certification 不会接受您的应用程序。如果这对您来说不是问题,请随时使用/SAFESEH:NO

documentation 说:

链接器无法生成图像的最常见原因是链接器的一个或多个输入文件(模块)与安全异常处理程序功能不兼容。模块与安全异常处理程序不兼容的一个常见原因是,它是使用 Visual C++ 早期版本的编译器创建的。

项目升级到VS2012是否有可能将设置更改为/SAFESEH:YES。也许你从来没有使用过SAFESEH

【讨论】:

非常感谢。你是救世主。顺便说一句,你知道这是否记录在某处The main implication of not having SAFESEH is that your application won't be accepted for the Windows 8 store. If that's not an issue for you then you should use /SAFESEH:NO. 我认为您不会找到任何相关文档。您可以轻松发现 Windows 8 商店需要 SafeSEH。但至于它是主要含义,那不会写在任何地方,并且主要是一种观点。 SafeSEH 已经存在了很长时间。许多编译器甚至无法生成它需要的异常表。当然它会消失,因为它只对 32 位应用程序有意义。编写一个 64 位应用程序,您的可执行文件必须包含异常表。 谢谢!我喜欢在 *** 上搜索并找到与我的问题完全匹配的内容!

以上是关于用 VS2012 编译 libffi 失败,出现致命错误 LNK1281: Unable to generate SAFESEH image的主要内容,如果未能解决你的问题,请参考以下文章

wsl2 libffi buildroot编译失败config.log: No such file or directory

wsl2 libffi buildroot编译失败config.log: No such file or directory

VS2010 c++编译的时候总是出现找不到exe文件、这是个啥情况

GLib编译错误(ffi.h),但安装了libffi

用VS2010编译的C++大作业出现了无法识别的外部符号BUG

vs2005 SP1发布网站时发布失败,没有错误信息,没有警告信息。怎么解决啊?