最近使用了一下 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;
}
參考連接: