首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Cygwin 編譯 SDL 1.2 完整踩坑實錄:從 GCC 版本衝突到鏈結庫缺失

     編輯:關於C語言

Cygwin 編譯 SDL 1.2 完整踩坑實錄:從 GCC 版本衝突到鏈結庫缺失

在 Windows 上用 Cygwin 編譯 SDL 1.2 充滿挑戰。本文記錄完整排坑過程:GCC 版本不相容、MinGW 交叉編譯失敗、鏈結器找不到 dllcrt2.o 等關鍵庫,最終成功編譯並執行測試程式。

環境與目標

  • 宿主:Windows 10 + Cygwin64
  • 目標:編譯 SDL-1.2.14 產生 SDL.dll 供 Cygwin 程式連結

關鍵錯誤與解決

  1. configure 階段報錯:Your compiler (gcc) does not produce Win32 executables!
    • 原因:Cygwin 預設 GCC 產生 Cygwin 專用執行檔(依賴 cygwin1.dll),非原生 Win32
    • 嘗試:切換 GCC 3.4.4(set-gcc-default-3.sh 不存在)、改用 MinGW GCC
    • 最終:安裝 Cygwin 離線版內建 GCC 3.4.4,./configure 通過
  2. make 階段鏈結錯誤:
    /usr/bin/ld: cannot find dllcrt2.o
    cannot find -lmingw32 -lmoldname -lmingwex -lmsvcrt
    • 原因:MinGW 交叉編譯工具鏈庫路徑未正確設定
    • 解法:修改 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 秒

心得總結

  • Cygwin 編譯原生 Windows 庫極易踩坑,GCC 版本、CRT 庫、鏈結路徑三大雷區
  • 虛擬機跑原生 Linux (Ubuntu) 一鍵 apt install libsdl1.2-dev 遠比 Cygwin 省時
  • 若必須用 Cygwin,優先嘗試 apt-cyg install libsdl-devel 使用預編譯套件
  • 記錄每次錯誤訊息、嘗試方案、最終解法,建立個人知識庫

這段經歷深刻體會到「工具鏈版本一致性」對 C/C++ 專案建構的決定性影響。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved