【发布时间】:2016-10-18 18:41:21
【问题描述】:
我正在使用 Visual Studio 2015 在 64 位 Windows 10 上使用 SDL2 在 C++ 中编写一个项目。我最近购买了一台新的 Windows 10 笔记本电脑并从 github 克隆了我的项目。我的项目编译正确,但运行时出现以下错误:
应用程序无法正确启动 (0xc000007b)。单击“确定”关闭应用程序。
根据我目前的研究,这个错误通常是由加载不兼容的 DLL 引起的,例如64 位版本而不是 32 位版本。到目前为止我发现的建议包括:
- 检查我使用的是 32 位版本的 SDL2 DLL
- 安装/重新安装 x86 版本的 Visual C++ Redistributable for Visual Studio 2015
- 使用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 有很多误报的警告)。结果如下:
在那之后,分析器冻结并且永远不会继续。请注意,SDL 组件和 VC 运行时正在正确加载。
该程序可以在我的两台旧机器上正确编译和加载,一台运行 32 位 Windows 7,另一台运行 64 位 Windows 10。
现在是实际问题。我可以采取哪些其他步骤来调试此崩溃?还是有人从我提供的信息中看出我做错了什么?
相关问题:
- The application was unable to start correctly (0xc000007b)
- Win 7, 64 bit, dll problems
- Using SDL_image in Visual studio 2010, with error "application was unable to start correctly 0xc000007b"
编辑:
正如 rflobao 所建议的,我在 32 位 exe 上使用 64 位版本的 Dependency Walker。这是我的分析运行的新输出:
此时,和以前一样,Dependency Walker 冻结。我仍然完全迷失了方向,并且不觉得我更接近能够确定导致问题的原因。
【问题讨论】:
-
Windows 操作系统负责具有匹配名称的searching and finding the first DLL。可能发生的情况是,有一个您可能不知道的 64 位组件位于系统 PATH 中的目录中,而 Windows 碰巧找到了该 DLL 并尝试加载它。
-
这是有道理的。你知道我有一个系统的方法来确定它是什么吗? Dependency Walker 似乎已经过时而无法使用,当然在我的路径中可以找到数百个 DLL。
-
在依赖遍历器中,单击 C:\ 图标 - 这将告诉您它从哪里获取文件。您是否尝试过从 64 位 cmd 提示符(windows/system32 中的那个)和 32 位 cmd 提示符(windows/syswow64 中的那个)运行它。
-
你真的到达主要功能了吗?你在那台机器上安装了 2015 版的 redists 吗?
-
实际上你的64位exe必须加载一个32位的dll,将所有的dll复制到与exe相同的目录并检查是否有效,并确认每个dll实际上是64位
标签: c++ dll visual-studio-2015 windows-10 sdl-2