我正在使用Visual Studio 2015在64位Windows 10上用C和SDL2编写一个项目。我最近购买了一台新的Windows10笔记本电脑,并从github克隆了我的项目。我的项目编译正确,但运行时出现以下错误:
应用程序无法正确启动(0xc000007b)。单击确定关闭应用程序。
根据我到目前为止的研究,这个错误通常是由加载不兼容的DLL引起的,例如64位版本而不是32位版本。到目前为止,我发现的建议包括:
我的项目设置为针对Win32构建,并且我已确保使用所有显式链接的DLL的32位版本(libfreetype-6、libpng16-16、SDL2、SDL2_-image、SDL2_-mixer和SDL2_-ttf)。我已经确认我的机器上安装了x86 VC可再发行版本。
最后,我尝试使用Dependency Walker来确定是什么DLL导致了这个问题(尽管我读过一些警告,Dependency Walker有很多误报)。结果如下:
在这一点之后,分析器会冻结并不再继续。请注意,SDL组件和VC运行时正在无错误地加载。
该程序在我的两台旧机器上正确编译和加载,一台运行32位视窗7,一台运行64位视窗10。
现在是真正的问题。我还可以采取哪些其他步骤来调试此崩溃?或者有人从我提供的信息中看出我做错了什么吗?
相关问题:
正如rfobao所建议的,我在32位exe上使用了64位版本的依赖沃克。以下是我分析运行的新输出:
在这一点上,像以前一样,依赖性Walker冻结了。我仍然完全不知所措,我觉得我离确定问题的原因还有一段距离。
我觉得自己哑口无言,但我终于明白了真正的问题所在。我使用的是SDL字体库SDL2_ttf,我根本没有复制zlib。从SDL2_ttf lib目录到我的构建目录的dll。我不明白为什么错误信息如此神秘;过去,缺少dll给了我一条有用的“foo.dll缺少”错误消息。
不管怎样,谢谢大家的帮助。至少我学到了一个有用的教训:在怀疑更复杂的问题之前,始终确保所有必需的DLL都存在。
这决不是完全可靠的,但你可以试试看。它需要垃圾桶。exe,它包含在Visual Studio中。
首先,获取程序的依赖DLL列表,根据路径进行解析:
del dlls.txt
for /f %d in ('dumpbin /dependents Questless.exe ^| findstr /ic:".dll"') do @echo %~$PATH:d >> dlls.txt
然后得到每一个的比特数:
for /f "delims=" %d in (dlls.txt) do @echo %d & dumpbin /headers "%d" | findstr /c:"machine (x"
这将产生如下输出:
C:\Windows\System32\kernel32.dll 8664 machine (x64) C:\programs\ed23\bin\hydra.dll 14C machine (x86)
请注意,这是不正确地使用来自System32的kernel32.dll,而不是WOW6432,因此它显示为x64。这是因为它只是使用了路径,而Windows加载程序实际上将使用WOW6432映射器、SxS、应用程序清单,并且只有当这些都没有解决依赖关系时才会回到路径上。它也找不到依赖项的依赖项(您可以通过依赖项进行脚本递归,但一定要过滤掉重复项),当然也不知道运行时显式动态负载。
尽管如此,这是一种快速获取短列表以进行检查的方法,可能会发现您的问题。
请注意,Dependency Walker有32位和64位版本。如果应用程序是32位的,则应使用32位版本。否则依赖项遍历器将看到System32的libs,而不是SisWOW64。图像显示32位和64位libs混合,其中64位有错误。
本文向大家介绍win10环境下C++ vs2015编译opencv249的教程,包括了win10环境下C++ vs2015编译opencv249的教程的使用技巧和注意事项,需要的朋友参考一下 打开CMake,设置源文件路径,和生成路径,第一步我新建的build和buildwin32 我之前用过了,所以这里我另外建了一个文件夹 test来演示。 然后点击Configure,会出现编译器的选项,Vis
我正在Eclipse Luna中使用Java1.8尝试Spark编程示例,并有以下代码- 我使用M2Eclipse构建和创建jar,并使用spark-submit在本地执行jar。jar正在工作并打印正确的输出,但是Eclipse总是将上面提到的行显示为编译错误-参数化 我不明白为什么Eclipse将其显示为编译错误,因为collect调用的返回类型是 非常感谢任何帮助。
我是Java编程的新手,我正在自学。 在运行javac时遇到一些问题后,我再次检查了windows地址和类路径,并将它们设置为正确的目录路径。问题解决了,因为现在当我输入'javac-version'时,我得到的版本显示java comilier已经安装。因此,现在我正试图从命令提示符运行一个Helloworld程序,以便检查基本功能!(我没有使用Eclipse,因为我还没有准备好增加额外的复杂性
主要内容:1) 创建项目(Project),2) 添加源文件,3) 编写代码并生成程序,4) 总结前面我们给出了一段完整的C语言代码,就是在显示器上输出“小牛知识库”,如下所示: 本节我们就来看看如何通过 VS2015 来运行这段代码。 1) 创建项目(Project) 在 VS2015 下开发程序首先要创建项目,不同类型的程序对应不同类型的项目,初学者应该从控制台程序学起。 打开 VS2015,在上方菜单栏中选择“文件 --> 新建 --> 项目”: 或者按下 组合键,都会弹出下面的对话
这是我的第一个程序,也是我第一次尝试运行它。我在Ubuntu上。 源代码: 这是我尝试运行它时遇到的错误: 编辑:好的,这是我的JRE版本:owner@ubuntu:~$java-版本java版本“1.6.0_24”OpenJDK运行时环境(IcedTea6 1.11.4)(6b24-1.11.4-1ubuntu0.12.04.1)OpenJDK 64位服务器虚拟机(构建20.0-b12,混合模式
我是Mulesoft Dataweave语言的新手,我不明白我在code-1和code-2语法中犯了什么错误。它在if块上显示一个编译时错误。你能建议我在下面的脚本中犯了什么错误吗?