使用VS2022 BuildTools编译SDL2项目遇LNK1561错误求助
解决SDL2编译时LNK1561入口点未定义问题
问题场景
尝试编译一段SDL2代码时,反复出现LINK : fatal error LNK1561: entry point must be defined错误,使用Visual Studio 2022 BuildTools版本,已尝试调整编译命令中库的顺序,但均无效。需要确认仅用BuildTools能否编译SDL2程序,以及需添加哪些命令行参数。
待编译的SDL2代码
//main.cpp #include<SDL.h> int main(int argc,char* argv[]) { if(SDL_Init(SDL_INIT_VIDEO)) { return 1; } SDL_Window* window=SDL_CreateWindow("Project Igloo",(1366-640)/2,(768-480)/2,640,480,SDL_WINDOW_SHOWN); if(!window) { SDL_Log("Error : failed to create window: %s\n",SDL_GetError()); } else { SDL_Renderer* renderer=SDL_CreateRenderer(window,-1,SDL_RENDERER_PRESENTVSYNC); if(!renderer) { SDL_Log("Error - failed to create renderer: %s\n",SDL_GetError()); } else { SDL_Rect fillrect={(640-200)/2,(480-200)/2,200,200}; SDL_SetRenderDrawColor(renderer,0xff,0xff,0xff,0xff); SDL_RenderClear(renderer); SDL_SetRenderDrawColor(renderer,0x80,0x80,0x80,0xff); SDL_RenderFillRect(renderer,&fillrect); SDL_RenderPresent(renderer); SDL_Event event; bool running=true; while(running) { while(SDL_PollEvent(&event)) { if(event.type==SDL_QUIT) running=false; } } SDL_DestroyRenderer(renderer); } SDL_DestroyWindow(window); } SDL_Quit(); return 0; }
已尝试的编译命令
cl /EHsc /Iinclude main.cpp SDL2main.lib SDL2.lib /link /out:main.execl /EHsc /Iinclude main.cpp SDL2.lib SDL2main.lib /link /out:main.execl /EHsc /Iinclude SDL2main.lib SDL2.lib main.cpp /link /out:main.execl /EHsc /Iinclude SDL2.lib SDL2main.lib main.cpp /link /out:main.exe
解决方案
仅用Visual Studio BuildTools完全可以编译SDL2程序,问题核心在于缺少子系统参数且库的依赖顺序需规范,正确编译需注意两点:
- 明确指定子系统类型:SDL2main.lib会替换默认程序入口点,必须通过参数指定子系统。若需保留控制台窗口,用
/SUBSYSTEM:CONSOLE;若要纯窗口程序(无控制台),用/SUBSYSTEM:WINDOWS。 - 库的顺序不能颠倒:
SDL2main.lib必须放在SDL2.lib之前,同时如果库文件不在系统默认路径,需用/LIBPATH:参数指定SDL库的所在目录。
正确编译命令示例
假设SDL头文件在include目录,库文件在lib目录:
- 编译为带控制台的程序:
cl /EHsc /Iinclude main.cpp /link /LIBPATH:lib SDL2main.lib SDL2.lib /SUBSYSTEM:CONSOLE /out:main.exe
- 编译为纯窗口程序:
cl /EHsc /Iinclude main.cpp /link /LIBPATH:lib SDL2main.lib SDL2.lib /SUBSYSTEM:WINDOWS /out:main.exe
补充说明
需确保BuildTools命令行环境与SDL库的架构匹配:若使用x64版本SDL库,需打开x64 Native Tools Command Prompt for VS 2022;32位库则对应x86环境,否则会出现架构不匹配的额外错误。
内容的提问来源于stack exchange,提问作者snowman4933
相关产品推荐
相关产品推荐

