SDL2搭配MinGW编译报undefined reference to 'WinMain@16'如何正规解决
错误原因
这个undefined reference to 'WinMain@16'错误的本质是Windows平台下GUI程序默认入口为WinMain而非标准C的main函数。SDL原生设计是通过SDL2main库将开发者编写的标准main函数包装为系统需要的WinMain入口,你现在的问题是包装逻辑没有正常匹配到你写的main函数。
解决步骤
- 首先修正
main函数的参数定义
SDL的main函数包装逻辑要求必须完整声明两个参数,且不能省略第二个参数的变量名,你当前代码里的int main(int argc, char **)省略了第二个参数名,会导致匹配失败。将函数定义改为:
即可满足SDL的包装要求。int main(int argc, char** argv) - 确认库架构匹配
检查你使用的MinGW位数(32位/64位)和你下载的SDL2、SDL2_image开发库的位数完全一致,架构不匹配也会导致SDL2main的包装逻辑无法正常链接。 - 确认链接参数顺序正确
你当前的链接顺序-lmingw32 -lSDL2main -lSDL2 -lSDL2_image是符合官方要求的,只需保证编译时没有调整过顺序即可。
可选补充
如果你开发的是不需要弹出GUI窗口的控制台程序,可以在编译参数中增加-mconsole强制指定控制台子系统,系统会直接以main作为入口,无需依赖SDL的WinMain包装逻辑,也符合原生使用规范。
内容的提问来源于stack exchange,提问作者Matthew J.
相关产品推荐
相关产品推荐

