SDL2编译报错:undefined reference to `SDL_*`及WinMain未定义求助
SDL2编译报错:undefined reference to
SDL_* 和 undefined reference to WinMain 我的main.cpp代码
#include <iostream> #include "inc/SDL.h" int main(int argc, char* args[]){ SDL_Window* window = nullptr; SDL_Renderer* renderer = nullptr; SDL_Init(SDL_INIT_VIDEO); SDL_CreateWindowAndRenderer(1920, 1080, 0, &window, &renderer); SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); SDL_RenderClear(renderer); SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255); SDL_RenderDrawPoint(renderer, 1920/2, 1080/2); SDL_RenderPresent(renderer); SDL_Delay(10000); return 0; }
编译错误信息
C:\msys64\ucrt64\bin\g++.exe -fdiagnostics-color=always -g C:\Users\xisha\Desktop\C++\firstproject\main.cpp -o C:\Users\xisha\Desktop\C++\firstproject\main.exe C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\Users\xisha\AppData\Local\Temp\cc8tOsJ6.o: in function `SDL_main': C:/Users/xisha/Desktop/C++/firstproject/main.cpp:6: undefined reference to `SDL_Init' C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/Users/xisha/Desktop/C++/firstproject/main.cpp:7: undefined reference to `SDL_CreateWindowAndRenderer' C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/Users/xisha/Desktop/C++/firstproject/main.cpp:8: undefined reference to `SDL_SetRenderDrawColor' C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/Users/xisha/Desktop/C++/firstproject/main.cpp:9: undefined reference to `SDL_RenderClear' C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/Users/xisha/Desktop/C++/firstproject/main.cpp:10: undefined reference to `SDL_SetRenderDrawColor' C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/Users/xisha/Desktop/C++/firstproject/main.cpp:11: undefined reference to `SDL_RenderDrawPoint' C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/Users/xisha/Desktop/C++/firstproject/main.cpp:12: undefined reference to `SDL_RenderPresent' C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/Users/xisha/Desktop/C++/firstproject/main.cpp:13: undefined reference to `SDL_Delay' C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../lib/libmingw32.a(lib64_libmingw32_a-crtexewin.o): in function `main': C:/M/B/src/mingw-w64/mingw-w64-crt/crt/crtexewin.c:70: undefined reference to `WinMain'
解决方法
1. 链接SDL2相关库
编译时未关联SDL2的库文件,导致所有SDL_*函数找不到实现。Windows下用MinGW编译SDL2,必须链接两个库:
SDL2main:负责SDL入口函数的平台适配SDL2:提供SDL核心功能实现
2. 修改编译命令
把原编译命令替换为:
g++ -g main.cpp -o main.exe -lSDL2main -lSDL2
如果你的SDL头文件不在系统默认路径(比如代码里用了#include "inc/SDL.h"),需要加-I指定头文件目录;库文件不在默认路径的话,加-L指定库目录,示例:
g++ -g main.cpp -o main.exe -I./inc -L./lib -lSDL2main -lSDL2
3. WinMain错误说明
SDL2在Windows平台会把标准main函数重定义为SDL_main,由SDL2main库提供真正的入口函数(适配Windows的WinMain规范)。如果不链接SDL2main,编译器会找不到Windows程序的默认入口,从而触发该错误。
内容的提问来源于stack exchange,提问作者Ishaan Gupta
相关产品推荐
相关产品推荐

