SDL(Simple DirectMedia Layer)是跨平台多媒體庫,提供音頻、鍵盤、鼠標、手柄、GPU 加速 2D/3D 渲染接口。本文覆蓋 Linux 下源碼編譯安裝、CMake 現代構建、最小窗口渲染示例、編鏈接命令詳解。
wget https://github.com/libsdl-org/SDL/releases/download/release-2.28.5/SDL2-2.28.5.tar.gz tar -xzf SDL2-2.28.5.tar.gz cd SDL2-2.28.5 mkdir build && cd build ../configure --prefix=/usr/local # 可選 --enable-shared --disable-static make -j$(nproc) sudo make install # 驗證 pkg-config --cflags --libs sdl2 # 輸出: -I/usr/local/include/SDL2 -L/usr/local/lib -lSDL2
cmake -S . -B build -DCMAKE_INSTALL_PREFIX=/usr/local -DSDL_SHARED=ON cmake --build build -j$(nproc) sudo cmake --install build
// sdl_basic.c #include#include int main(int argc, char *argv[]) { if (SDL_Init(SDL_INIT_VIDEO) < 0) { fprintf(stderr, "SDL_Init 失敗: %s\n", SDL_GetError()); return 1; } SDL_Window *window = SDL_CreateWindow( "SDL2 測試窗口", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 512, 512, SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE ); if (!window) { fprintf(stderr, "CreateWindow 失敗: %s\n", SDL_GetError()); SDL_Quit(); return 1; } SDL_Renderer *renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); if (!renderer) { fprintf(stderr, "CreateRenderer 失敗: %s\n", SDL_GetError()); SDL_DestroyWindow(window); SDL_Quit(); return 1; } // 設置繪製顏色為紅色 (R,G,B,A) SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255); // 清屏 SDL_RenderClear(renderer); // 呈現到窗口 SDL_RenderPresent(renderer); // 事件循環替代固定延時 SDL_Event e; int quit = 0; while (!quit) { while (SDL_PollEvent(&e)) { if (e.type == SDL_QUIT) quit = 1; } } SDL_DestroyRenderer(renderer); SDL_DestroyWindow(window); SDL_Quit(); return 0; }
# pkg-config 自動獲取編譯選項 gcc sdl_basic.c -o sdl_basic $(pkg-config --cflags --libs sdl2) # 手動指定(不推薦) gcc sdl_basic.c -o sdl_basic -I/usr/local/include/SDL2 -L/usr/local/lib -lSDL2
彈出 512x512 紅色窗口,點擊關閉按鈕正常退出。
SDL_Texture、圖片加載(SDL_image)、字體渲染(SDL_ttf)。SDL_AudioSpec、回調函數、SDL_mixer 高級混音。SDL_GL_CreateContext、SDL_Vulkan_CreateSurface。