编译报错:undefined reference to 'WinMain',SDL项目调试求助
解决SDL编译时"undefined reference to `WinMain'"的问题
这个问题我之前碰到过好多次,本质是SDL库的默认行为导致的——SDL会默认把你的程序当作Windows窗口应用,它会尝试替换标准的main函数为WinMain,但你的代码里写的是标准的int main(),链接器找不到SDL期望的入口,就报了这个错。
下面是几个靠谱的解决方法,按优先级来:
方法1:在代码里定义SDL_MAIN_HANDLED宏
在包含SDL.h之前添加这个宏,告诉SDL不要接管程序的入口函数,让它使用你写的main。修改后的代码如下:
#define SDL_MAIN_HANDLED #include <iostream> #include <SDL.h> using namespace std; int main() { if(SDL_Init(SDL_INIT_VIDEO) < 0 ) { cout << "SDL Init Failed" << endl; return 1; } cout << "SDL Init Succeeded" << endl; SDL_Quit(); return 0; }
方法2:在编译器选项里添加宏定义
如果不想改代码,可以在Eclipse的编译配置里添加编译选项:-DSDL_MAIN_HANDLED。具体操作是:
- 右键你的项目 → Properties → C/C++ Build → Settings → GCC C++ Compiler → Preprocessor → 在Defined symbols里添加
SDL_MAIN_HANDLED(或者直接在Other flags里加-DSDL_MAIN_HANDLED)
额外检查点
还要确认你在链接阶段正确添加了SDL2的库:
- 在Eclipse的链接器设置里,添加
SDL2(也就是链接选项-lSDL2),注意库的顺序要放在你的源文件之后,不然也可能出现链接错误。 - 另外,确保SDL的bin目录(里面有SDL2.dll)已经加到系统环境变量PATH里,或者把SDL2.dll复制到你的项目编译输出目录,不然运行时会找不到动态库。
内容的提问来源于stack exchange,提问作者Ghost
相关产品推荐
相关产品推荐

