SDL 獲取與安裝
- 直接去官網(wǎng)下載
下載示意圖
根據(jù)使用的編譯器選擇對(duì)應(yīng)的版本,我用的是mingw,所以選擇SDL2-devel-2.0.9-mingw.tar.gz,如果是微軟的編譯器,則使用 VC 版本 - 下載之后解壓,可以看到有兩個(gè)文件夾
x86_64-w64-mingw32和i686-w64-mingw32分別代表64位版本和32位版本,選擇其中一個(gè)然后將其拷貝到一個(gè)自己容易找到的文件夾即可。例如我拷貝到D盤(pán),并命名文件夾為SDL_lib
安裝示意圖
SDL 使用
-
一個(gè)簡(jiǎn)單的例子
#include <SDL2/SDL.h> #include <stdio.h> #include <stdlib.h> #include <stdbool.h> int main(int argc, char *argv[]) { SDL_Window *window = SDL_CreateWindow("demo", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640, 480, SDL_WINDOW_SHOWN); SDL_Renderer *renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED); bool quit = false; SDL_Event event; SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255); while (!quit) { while (SDL_PollEvent(&event)) { switch (event.type) { case SDL_QUIT: quit = true; break; case SDL_MOUSEMOTION: if(SDL_GetMouseState(NULL, NULL) &SDL_BUTTON(1)) SDL_RenderDrawPoint(renderer, event.motion.x, event.motion.y); break; } } SDL_RenderPresent(renderer); SDL_Delay(1000 / 60); } SDL_DestroyWindow(window); SDL_DestroyRenderer(renderer); return 0; } -
編寫(xiě) makefile
# 源文件 SRC = demo.c # SDL 庫(kù)的位置 SDLDIR = D:\SDL_lib # 編譯參數(shù) CFLAGS = -I $(SDLDIR)\include -L $(SDLDIR)\lib -lmingw32 -lSDL2main -lSDL2 -O2 #-mwindows # 選擇編譯器 CC = D:\msys2\mingw64\bin\g++.exe demo.exe: $(SRC) $(CC) $(SRC) $(CFLAGS) -o demo.exe- SDLDIR 是你的 SDL 庫(kù)放的位置,編譯參數(shù)
-I表示頭文件的文件夾,-L表示鏈接庫(kù)的文件夾,一般該文件夾下有很多的庫(kù),但是還沒(méi)有鏈接進(jìn)去,然后-l表示要具體要鏈接的庫(kù),這里鏈接的三個(gè)庫(kù)是必須的 -
-lmingw32使用 mingw 環(huán)境來(lái)創(chuàng)建 windows 窗口,如果使用VC++的編譯器,這個(gè)庫(kù)是不必要的 -
-lSDL2main和-lSDL2是 SDL庫(kù)的主體部分 -
-O2為編譯器優(yōu)化等級(jí) -
-mwindows被注釋了,這是為了方便調(diào)試,使用該參數(shù)后你的程序在運(yùn)行時(shí)就不會(huì)打開(kāi)命令行,可在程序發(fā)布時(shí)再使用 - 選擇編譯器,這里我顯式地指定為
msys2環(huán)境下的mingw64g++ 的編譯器,如果你把你的mingw64\usr\bin添加到了系統(tǒng)環(huán)境變量,那么直接寫(xiě)g++或gcc也行
- SDLDIR 是你的 SDL 庫(kù)放的位置,編譯參數(shù)
-
編譯運(yùn)行
目前我們的工程目錄如下:
工程文件夾
在當(dāng)前目錄打開(kāi)終端使用make得到可執(zhí)行程序如下:
編譯示意圖
雙擊打開(kāi),你的程序可能會(huì)出現(xiàn)這樣的情況:
沒(méi)添加庫(kù)運(yùn)行錯(cuò)誤
這時(shí)候有兩種解決辦法:-
第一種:到 SDL 庫(kù)的目錄下,把
\bin目錄下的SDL2.dll添加到當(dāng)前工程文件夾下 -
第一種: 把 SDL 庫(kù)的
\bin目錄添加到系統(tǒng)環(huán)境變量中:
SDL運(yùn)行庫(kù)添加到系統(tǒng)變量
這里推薦使用第二種,因?yàn)樵诔鯇W(xué) SDL時(shí)需借鑒網(wǎng)上很多 demo,這時(shí)候每次編譯完都要去復(fù)制SDL2.dll文件到工程目錄下太麻煩,第二種因?yàn)閯?dòng)態(tài)運(yùn)行庫(kù)已經(jīng)添加到系統(tǒng)環(huán)境變量了,每次運(yùn)行都自動(dòng)訪問(wèn)該文件夾下的運(yùn)行庫(kù),比較方便
最后程序運(yùn)行結(jié)果如下:
程序運(yùn)行結(jié)果
-
第一種:到 SDL 庫(kù)的目錄下,把
使用 VS Code 開(kāi)發(fā)(推薦)
VS Code 輕便,同時(shí)提供智能提示和自動(dòng)補(bǔ)全,開(kāi)發(fā)起來(lái)比較方便,推薦使用
- 使用 VS Code 打開(kāi)剛才的 demo 工程文件夾,如下:
VS Code頭文件錯(cuò)誤
如果你的源文件報(bào)上面的錯(cuò)誤,可能是你沒(méi)有設(shè)置編譯器或頭文件,首先確保你已經(jīng)安裝微軟開(kāi)發(fā)的 C/C++ 插件:
安裝 C/C++插件
然后按下Ctrl + Shift + P彈出命令框,輸入 C/C++ UI,進(jìn)入配置文件的設(shè)置界面:
進(jìn)入VS Code配置
在編譯器路徑設(shè)置框輸入你的mingw編譯器的具體位置,同時(shí)在編譯參數(shù)框輸入-I 你的SDL庫(kù)下的include文件夾,用來(lái)告訴編譯器,你的第三方庫(kù)頭文件的文件夾在哪里:
配置 C/C++插件
最后,C/C++插件就可以通過(guò)編譯器和頭文件參數(shù)為我們提供智能提示和自動(dòng)補(bǔ)全了:
效果圖
程序打包發(fā)布(可選)
有時(shí)候我們想寫(xiě)一個(gè)桌面小游戲或者小工具,但是程序往往包含鏈接庫(kù),要發(fā)送或者推廣都不太方便,這時(shí)候我們就可以將程序和鏈接庫(kù)打包起來(lái),做成一個(gè)單文件程序,這樣就方便多了
打包工具很多,這里選擇使用 Enigma Virtual Box,這個(gè)軟件容易下載,百度一下,隨便打開(kāi)一個(gè)網(wǎng)站就可以下載,比如這個(gè)網(wǎng)站腳本之家、第七下載、天極下載
下載后打開(kāi)程序,主程序選擇我們的 .exe 程序文件,下面的添加按鈕選擇添加文件 SDL2.dll, 如果程序運(yùn)行時(shí)需要有圖片文件或者其他文件都可以添加進(jìn)來(lái),包括后面開(kāi)發(fā)大型軟件可能要同時(shí)包含多個(gè) dll,添加完成然后打包:

打包示意圖
打包完成后,可以看到新加的
demo_boxed.exe,這個(gè)程序顯然比 demo.exe 大很多,因?yàn)槔锩姘?SDL2.dll 庫(kù),這樣我們的程序就可以在沒(méi)有 SDL2.dll 其他人的電腦運(yùn)行了
打包結(jié)果











