Linux下用MinGW编译SDL2 Windows程序报0xc000007b错误如何解决
问题解决方法
0xc000007b是Windows平台特有的程序启动错误,核心原因是程序加载时架构不匹配或依赖库版本/架构错误,按以下步骤排查即可解决:
- 优先检查SDL2动态库架构匹配问题
你使用x86_64-w64-mingw32-gcc编译生成的是64位Windows程序,必须配套使用64位的SDL2.dll:
从交叉编译使用的SDL2开发包路径/home/russell/Windows_Dev/SDL2-devel-2.0.16-mingw/SDL2-2.0.16/x86_64-w64-mingw32/bin/下找到SDL2.dll,将该文件和Test.exe放在同一目录下再运行,不要使用网上下载的32位SDL2.dll,也不要误拿开发包中32位路径下的dll文件。 - 确认运行环境架构匹配
如果你运行程序的Windows系统是32位版本,无法运行64位程序,需要更换i686-w64-mingw32-gcc工具链编译32位版本程序,配套32位SDL2.dll使用。 - 静态编译避免依赖问题
如果不想携带动态dll,可以修改链接命令添加-static参数,同时补充SDL2静态编译所需的系统依赖库:
静态编译生成的exe可直接在Windows 64位系统运行,无需额外携带dll文件。x86_64-w64-mingw32-gcc -L/home/russell/Windows_Dev/SDL2-devel-2.0.16-mingw/SDL2-2.0.16/x86_64-w64-mingw32/lib -I/home/russell/Windows_Dev/SDL2-devel-2.0.16-mingw/SDL2-2.0.16/x86_64-w64-mingw32/include -fstack-protector -std=c17 -Wall -g -o build/Test.exe obj/main.o -lmingw32 -lSDL2main -lSDL2 -mwindows -static -lm -ldinput8 -limm32 -lversion -lsetupapi
额外说明:你提供的示例代码存在未初始化
SDL_Surface* surface变量的问题,SDL_CreateTextureFromSurface传入野指针会触发运行时崩溃,补充图片加载逻辑即可修复该运行时错误,和本次0xc000007b启动错误无关。
内容的提问来源于stack exchange,提问作者RustyMonster
相关产品推荐
相关产品推荐

