Windows下MinGW w64+CMake编译SDL2程序无法运行求助
解决MinGW-w64编译SDL2程序启动无响应的问题
兄弟,我之前踩过几乎一模一样的坑,给你捋几个能解决问题的方向:
先修正链接参数的关键错误
你用的链接参数里写的是-lSDL,但SDL2的正确链接库名称是-lSDL2啊!这大概率是核心问题——你链接的是旧版SDL1.x的库,但代码里用的是SDL2的逻辑,导致依赖完全混乱,才会出现那些看似系统库缺失的奇怪报错(后面会说为啥DependencyWalker会误报)。
别被DependencyWalker的误报误导
那些API-MS-WIN-*开头的“库”其实不是真实的DLL文件,是Windows 10之后引入的API集,DependencyWalker是个比较老的工具,对新的Windows API集支持很差,所以会显示找不到,但这些根本不是真的缺失。真正的问题还是出在你的编译链接配置上。
给你一个靠谱的CMake配置模板
我自己用MinGW-w64+SDL2的CMakeLists.txt模板,你可以直接参考修改:
cmake_minimum_required(VERSION 3.16) project(YourSDLApp) # 设置语言标准(C项目就改成C_STANDARD) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) # 让CMake找到SDL2库,要是SDL2没装在默认路径,就加一句set(SDL2_DIR "你的SDL2开发包路径") find_package(SDL2 REQUIRED) # 添加你的可执行文件,替换成自己的源文件 add_executable(YourApp src/main.cpp) # 正确链接库,顺序别乱:mingw32在前,然后SDL2main,最后SDL2 target_link_libraries(YourApp PRIVATE mingw32 SDL2main SDL2) # 如果要编译成窗口程序(无控制台),加这个参数 set_target_properties(YourApp PROPERTIES LINK_FLAGS "-mwindows" )
运行时的关键依赖别忘
编译成功后,一定要把SDL2的运行时DLL(就是SDL2开发包里的SDL2.dll)放到你的可执行文件同一个文件夹里,或者加到系统PATH里——这个DLL不是Windows自带的,漏了肯定启动不了。
额外的排查小技巧
- 先暂时去掉
-mwindows参数,编译成带控制台的程序,运行时看控制台输出的错误信息,比直接窗口无响应更容易定位问题。 - 确认你的MinGW-w64和SDL2库是同位数的:要么都是32位,要么都是64位,跨位数编译的话也会直接启动失败。
内容的提问来源于stack exchange,提问作者Ansver
相关产品推荐
相关产品推荐

