在Win10上使用VS2015编译的C++ SDL2程序中调试加载时错误

Jon*_*man 10 c++ dll sdl-2 windows-10 visual-studio-2015

我正在使用Visual Studio 2015在64位Windows 10上使用SDL2编写C++项目.我最近购买了一台新的Windows 10笔记本电脑并从github克隆了我的项目.我的项目编译正确,但运行时出现以下错误:

应用程序无法正确启动(0xc000007b).单击"确定"关闭应用程序.

根据我目前的研究,这个错误通常是由加载不兼容的DLL引起的,例如64位版本而不是32位版本.到目前为止我发现的建议包括:

  • 检查我是否使用32位版本的SDL2 DLL
  • 安装/重新安装Visual Studio 2015的Visual C++ Redistributable的x86版本
  • 使用Dependency Walker来解决哪个DLL失败的问题

我的项目设置为Win32构建,我确保我使用的是我明确链接的所有DLL的32位版本(libfreetype-6,libpng16-16,SDL2,SDL2_image,SDL2_mixer和SDL2_ttf) .我已确认x86 VC++ Redistributable已安装在我的机器上.

最后,我尝试使用Dependency Walker来确定可能导致问题的DLL(虽然我已经读到了Dependency Walker有很多误报的警告).这些是结果:

Dependency Walker静态分析 Dependency Walker静态分析

Dependency Walker分析结果 Dependency Walker分析结果

在那之后,探查器冻结并且永远不会继续.请注意,SDL组件和VC运行时正在加载而没有错误.

该程序在我的两台旧机器上正确编译和加载,一台运行32位Windows 7,一台运行64位Windows 10.

现在是实际问题.我可以采取哪些其他步骤来调试此崩溃?或者有人从我提供的信息中看到我做错了什么?

相关问题:

编辑:

正如rflobao建议的那样,我在32位exe上使用了64位版本的Dependency Walker.以下是我的分析运行的新输出:

新的Dependency Walker配置文件输出

此时,和以前一样,Dependency Walker冻结了.我仍然完全迷失了,并且不觉得我更接近能够确定导致问题的原因.

小智 5

请注意,Dependency Walker具有32位和64位版本.如果您的应用程序是32位,则应使用32位版本.否则,Dependency Walker将看到libs到System32而不是SisWOW64.您的图像显示32位和64位库混合,其中64有错误.


Jon*_*man 2

我觉得自己很愚蠢,但我终于弄清楚了真正的问题。我正在使用 SDL 字体库 SDL2_ttf,并且我只是没有将 zlib.dll 从 SDL2_ttf lib 目录复制到我的构建目录中。我不明白为什么错误消息如此神秘;过去,丢失的 DLL 给了我一个有用的“foo.dll 丢失”错误消息。

不管怎样,谢谢大家的帮助。至少我学到了一个有用的教训:在怀疑更复杂的问题之前,始终确保所有必需的 DLL 都存在。