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

标签 c++ dll visual-studio-2015 windows-10 sdl-2

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

The application was unable to start correctly (0xc000007b). Click OK to close the application.

根据我目前的研究,这个错误通常是由加载不兼容的 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 static analysis

Dependency Walker 分析结果 Dependency Walker profiling results

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

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

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

相关问题:

编辑:

正如 rflobao 所建议的,我在 32 位 exe 上使用 64 位版本的 Dependency Walker。这是我的分析运行的新输出:

New Dependency Walker Profile Output

此时,和以前一样,Dependency Walker 卡住了。我仍然完全迷失了方向,感觉自己离确定问题的原因还差得很远。

最佳答案

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

关于c++ - 在Win10上用VS2015编译的C++ SDL2程序调试加载时间错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37872877/

相关文章:

c++ - MSVS 2015 构建 dll - MSVCRTD.lib (exe_main.obj) 中 invoke_main 中未解析的外部符号 _main

c++ - Rcpp 中的折叠 vector

c++ - MQL4 到 Microsoft Visual Studio 2017 社区上的 C++ dll

c++ - 将 C++ DLL 加载到调用另一个 DLL 中的函数的 matlab

dll - _DllMain @ 12已定义

c# - 该项目需要一个未安装的平台 SDK(UAP,版本 10586.0)

visual-studio-2015 - 如何取消选择 "Microsoft Visual Studio Version Selector"的默认版本

c++ - 当它被忽略时,返回值(返回一个对象)会发生什么?

c++ - OpenGL/GLUT 中的鼠标拖动对象

c++ - 使用 C 的 '...' 参数包作为 C++ 模板值?