在 Windows 上用 Cygwin 編譯 SDL 1.2 充滿挑戰。本文記錄完整排坑過程:GCC 版本不相容、MinGW 交叉編譯失敗、鏈結器找不到 dllcrt2.o 等關鍵庫,最終成功編譯並執行測試程式。
SDL.dll 供 Cygwin 程式連結Your compiler (gcc) does not produce Win32 executables!
set-gcc-default-3.sh 不存在)、改用 MinGW GCC./configure 通過/usr/bin/ld: cannot find dllcrt2.o cannot find -lmingw32 -lmoldname -lmingwex -lmsvcrt
Makefile 第 27 行 EXTRA_LDFLAGS 追加 -L/lib/mingw,並將 dllcrt2.o 複製至 Makefile 目錄tar -zxvf SDL-1.2.14.tar.gz cd SDL-1.2.14 ./configure # 使用 GCC 3.4.4 通過 make # 修改 Makefile 後通過 make install # 安裝至 /usr/local
// test.c
#include <SDL.h>
#include <stdlib.h>
int main() {
SDL_Surface *screen;
Uint32 color;
if (SDL_Init(SDL_INIT_VIDEO) < 0) { fprintf(stderr, "Init失敗: %s\n", SDL_GetError()); exit(1); }
screen = SDL_SetVideoMode(640, 480, 16, SDL_SWSURFACE);
if (!screen) { fprintf(stderr, "Video模式失敗: %s\n", SDL_GetError()); exit(1); }
atexit(SDL_Quit);
color = SDL_MapRGB(screen->format, 0, 0, 255); // 藍色
SDL_FillRect(screen, &screen->clip_rect, color);
SDL_UpdateRect(screen, 0, 0, 0, 0);
SDL_Delay(5000);
return 0;
}
gcc test.c -o test -I/usr/local/include/SDL -L/usr/local/lib -lSDL -lpthread ./test # 成功顯示藍色視窗 5 秒
apt install libsdl1.2-dev 遠比 Cygwin 省時apt-cyg install libsdl-devel 使用預編譯套件這段經歷深刻體會到「工具鏈版本一致性」對 C/C++ 專案建構的決定性影響。