msys2 編譯 SDL2 應用程序

最近使用了一下 SDL 。也是由於 love2d 也使用了 SDL 。我使用的是 msys2 環境。

先安裝 SDL 庫。

$ pacman -Ss sdl
mingw64/mingw-w64-x86_64-SDL2
$ pacman -S mingw64/mingw-w64-x86_64-SDL2

查看已安裝的 SDL 庫。

$ pacman -Qs sdl
local/mingw-w64-x86_64-SDL2 2.0.20-1
$ pacman -Ql mingw-w64-x86_64-SDL2
mingw-w64-x86_64-SDL2 /mingw64/
mingw-w64-x86_64-SDL2 /mingw64/bin/
mingw-w64-x86_64-SDL2 /mingw64/bin/sdl2-config
mingw-w64-x86_64-SDL2 /mingw64/bin/SDL2.dll
mingw-w64-x86_64-SDL2 /mingw64/include/
mingw-w64-x86_64-SDL2 /mingw64/include/SDL2/
mingw-w64-x86_64-SDL2 /mingw64/include/SDL2/SDL.h
mingw-w64-x86_64-SDL2 /mingw64/lib/
mingw-w64-x86_64-SDL2 /mingw64/lib/libSDL2.a
mingw-w64-x86_64-SDL2 /mingw64/lib/libSDL2.dll.a
mingw-w64-x86_64-SDL2 /mingw64/lib/libSDL2main.a

如下示例代碼。

#define SDL_MAIN_HANDLED

#include <SDL2\SDL.h>

int main(int argc, char* argv[]) {
    SDL_Init(SDL_INIT_VIDEO);
    SDL_Quit();
    return 0;
}

若註釋掉 SDL_MAIN_HANDLED 直接編譯會出錯,如下所示。在 #include <SDL2\SDL.h> 之前定義 SDL_MAIN_HANDLED 則編譯成功。

$ gcc -o test test.c -lSDL2
D:/msys64-20220128/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: 
D:/msys64-20220128/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/lib/../lib/libmingw32.a(lib64_libmingw32_a-crt0_c.o): in 
function `main':
C:/M/mingw-w64-crt-git/src/mingw-w64/mingw-w64-crt/crt/crt0_c.c:18: undefined 
reference to `WinMain'
collect2.exe: error: ld returned 1 exit status

或者採用 gcc -o test test.c -lmingw32 -lSDL2main -lSDL2 也編譯成功。

#include <SDL2\SDL.h>

int main(int argc, char* argv[]) {
    SDL_Init(SDL_INIT_VIDEO);
    SDL_Quit();
    return 0;
}

參考連接:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章