我为zlib 1.2.7创建了一个新的解决方案,将其设置为静态库,从./zlib/contrib/minizip
添加了必要的头文件和源文件,并使其编译得很好。然后我将它与libpng(也作为一个静态库)链接,它也编译好。然后,我将libpng链接到我的图形引擎项目(也是一个静态库)......仍然没有错误。
但是一旦我将主项目链接到我的图形引擎,我就会收到几个关于 crc32.obj , deflate.obj , inflate的LNK2026错误。 obj , d3dxplane.obj , d3dxvec4.obj 和其他zlib / directx相关模块。它告诉我它们来自我的图形引擎库,所以我决定通过将/SAFESEH:NO
添加到相应项目的链接器标志来解决这个问题。
注意:我应该声明所有项目都设置为目标x86,而不是x64。
warning LNK4044: unrecognized option '/SAFESEH'; ignored
导致我的主项目中出现相同的LINK2026错误
如果我打开visual studio命令提示符并键入LINK /?
,则确认/SAFESEH
是一个有效的链接器选项。当我使用/SAFESEH
(没有':NO')时,我得到同样的错误,如果我完全省略它,那么我的主项目就是拒绝构建。
这里发生了什么?我该如何解决这个问题?
答案 0 :(得分:15)
通过向我的链接器标志添加/ SAFESH:NO
好吧,你拼错了。也许在您的问题中,也许在链接器设置中,这种巧合往往可以解释为什么应该起作用的东西不起作用。
无需输入即可使用,请按此方式进行操作。项目+属性,链接器,高级,向下滚动右侧面板,“图像具有安全异常处理程序”设置。使用组合框选择编号
答案 1 :(得分:1)
快速google shows表示您需要使用适当的编译器设置重新编译有问题的模块。
请注意,此标志仅适用于x86目标。如果您的目标是64位,则无论如何都会出现此错误。
此外,来自http://msdn.microsoft.com/en-us/library/9a89h429(v=vs.80).aspx,可能是相关的:
链接器无法生成的最常见原因 图像是因为一个或多个输入文件(模块)来的 链接器与安全异常处理程序功能不兼容。一个 模块与安全异常不兼容的常见原因 处理程序是因为它是使用前一个编译器创建的 Visual C ++版本。
如果您提供编译器的版本号以及如何构建zlib的副本(您是自己构建它,如果是这样,使用相同的编译器吗?)将会有所帮助。
答案 2 :(得分:0)