You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 05:55:39