SDL 庫(kù)安裝、環(huán)境配置與使用

SDL 獲取與安裝

  • 直接去官網(wǎng)下載
    下載示意圖

    根據(jù)使用的編譯器選擇對(duì)應(yīng)的版本,我用的是 mingw,所以選擇 SDL2-devel-2.0.9-mingw.tar.gz,如果是微軟的編譯器,則使用 VC 版本
  • 下載之后解壓,可以看到有兩個(gè)文件夾 x86_64-w64-mingw32i686-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)境下的 mingw64 g++ 的編譯器,如果你把你的 mingw64\usr\bin 添加到了系統(tǒng)環(huán)境變量,那么直接寫(xiě) g++gcc 也行
  • 編譯運(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é)果

使用 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é)果

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容