Linux SDL2 installation and C program design

本版討論Raspberry PI相關技術開發、設計與應用
回覆文章
inho
文章: 27
註冊時間: 2017-12-08, 23:00

Linux SDL2 installation and C program design

文章 inho » 2018-01-27, 15:49

安裝之前先做以下幾件事:
/***************************************************************
// Linux Update and Upgrade
//***************************************************************
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get dist-upgrade

/*****************************************************
// 安裝 SDL2 Source Code (OK)
// http://blog.shahada.abubakar.net/post/h ... spberry-pi
//*****************************************************
$ cd ~
$ wget https://www.libsdl.org/release/SDL2-2.0.7.tar.gz
$ tar zxvf SDL2-2.0.7.tar.gz
$ cd SDL2-2.0.7 && mkdir build && cd build
$ ../configure
$ make -j 4
$ sudo make install
// 安裝之後,在 /usr/local/include 目錄下會看到一個新安裝的 SDL2目錄 (/usr/local/includesdl/SDL2/),目錄之下包含SDL2相關的 .h header file
// 同時在 /usr/local/lib 目錄下會看到幾個新安裝的 SDL2 相關函式庫檔案:libSDL2XXXX等,表示 SDL2安裝成功
// 接下來還要安裝幾個SDL2相關的配件函式庫:SDL2_image、SDL2_ttf、SDL2_net等
//**************************************************
// download, build and install SDL_image: (SDL2_image-2.0.2 ERROR ?) (SDL2_image-2.0.1 OK)
//*********************************************************
$ cd ~
$ wget http://www.libsdl.org/projects/SDL_imag ... 0.2.tar.gz
$ wget http://www.libsdl.org/projects/SDL_imag ... 0.1.tar.gz
$ tar zxvf SDL2_image-2.0.2.tar.gz
$ tar zxvf SDL2_image-2.0.1.tar.gz
$ cd SDL2_image-2.0.1
$ ./autogen.sh
$ ./configure
$ make
$ sudo make install
$ cd ..
// 安裝之後,在 /usr/local/includesdl/SDL2/目錄之下看到一個SDL2_image .h header file
// 同時在 /usr/local/lib 目錄下會看到幾個新安裝的 libSDL2_image.a .la .so 等函式庫,表示 SDL2_image 安裝成功

//*********************************************************
// download, build and install SDL_mixer: (OK)
//*******************************************************************
$ cd ~
$ wget http://www.libsdl.org/projects/SDL_mixe ... 0.2.tar.gz
$ tar zxvf SDL2_mixer-2.0.2.tar.gz
$ cd SDL2_mixer-2.0.2 && mkdir build && cd build
$ ../configure
$ make
$ sudo make install
// 安裝之後,在 /usr/local/includesdl/SDL2/目錄之下看到一個SDL2_mixer .h header file
// 同時在 /usr/local/lib 目錄下會看到幾個新安裝的 libSDL2_mixer.a .la .so 等函式庫,表示 SDL2_mixer 安裝成功

//**************************************************************
// download, build and install SDL_net: (OK)
//******************************************************************
$ cd ~
$ wget http://www.libsdl.org/projects/SDL_net/ ... 0.1.tar.gz
$ tar zxvf SDL2_net-2.0.1.tar.gz
$ cd SDL2_net-2.0.1 && mkdir build && cd build
$ ../configure
$ make -j 4
$ sudo make install

//********************************************************
// download, build and install SDL_smpeg2: (OK)
//  /usr/local/include/smpeg2, /usr/local/lib
//****************************************************************
$ cd ~
$ wget http://www.libsdl.org/projects/smpeg/re ... 0.0.tar.gz
$ tar zxvf smpeg2-2.0.0.tar.gz
$ cd smpeg2-2.0.0 && mkdir build && cd build
$ ../configure
$ make -j 4
$ sudo make install

//****************************************************
// download, build and install SDL_ttf: (ERROR)
// 安裝這個函式庫時,可能會失敗,可以上網Google一下解決方案
//*************************************************************
$ cd ~
$ wget http://www.libsdl.org/projects/SDL_ttf/ ... .14.tar.gz
$ tar zxvf SDL2_ttf-2.0.14.tar.gz
$ cd SDL2_ttf-2.0.14
//*************
$ mkdir build && cd build
$ ../configure
//******************* OR
$ cd SDL2_ttf-2.0.14
$ ./autogen.sh
$ ./configure
$ make
$ sudo make install
// 如果 SDL2_ttf 安裝失敗 (檢查 /usr/local/include/SDL2/ 目錄底下有沒有出現 SDL2_ttf.h Header file,沒有這個檔案就是安裝失敗 )
//*************************************************************
// 用其他方案安裝 SDL2_ttf 函式庫:
//************************************************************
$ sudo apt-get install libsdl2-ttf-dev
// 安裝完成後 會在 /usr/include/ 底下看到一個新的 SDL2目錄,裡面包含前述 SDL2相關的 header file,包括 SDL2_ttf.h、SDL2.h 等header file,這種安裝// 方式預設的SDL2並非最新版本,所以,把其中的 SDL2_ttf.h Copy 到 /usr/local/include/SDL2/ 目錄下即可,
// 但是,SDL2_ttf相關的函式庫 仍然安裝在 /usr/local/lib 目錄下。
$ sudo cp /usr/include/SDL2/SDL_ttf.h /usr/local/include/SDL2

// 以上的安裝在 ubuntu 16.0.4 及 17.0.4都是成功的
// 再來,測試 SDL2 的應用程式,回到 user的 home,或建造一個 testSDL目錄,編輯一個 C Program
$ cd ~
$ vi SDLimage.c
#include <SDL2/SDL.h>

int main()
{
SDL_Window *window;
SDL_Surface *surface;
SDL_Rect rect = {0, 0, 200, 200};

SDL_Init(SDL_INIT_EVERYTHING);

window = SDL_CreateWindow("test", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 800, 600, SDL_WINDOW_SHOWN);
if (!window) {
fprintf(stderr, "main: %s\n", SDL_GetError());
return -1;
}

surface = SDL_GetWindowSurface(window);
if (!surface) {
fprintf(stderr, "main: %s\n", SDL_GetError());
return -1;
}

SDL_FillRect(surface, &rect, 0xffff0000);
SDL_UpdateWindowSurface(window);
SDL_Delay(1000);

SDL_DestroyWindow(window);
SDL_Quit();
}
// 存檔之後, 編譯這個程式:
$ gcc -o SDLimage sdlimage.c `sdl2-config --cflags --libs`
// 其中,`sdl2-config --cflags --libs` option將自動設定 SDL2的 include path指向相關目錄位置,及 linker 的 lib path,如果想知道相關檔案及目錄位置,可執行以下指令看看結果:
$ sdl2-config --cflags --libs
// 將得到以下結果:
$ -I/usr/local/include/SDL2 -I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads -I/opt/vc/include/interface/vmcs_host/linux -D_REENTRANT
-L/usr/local/lib -Wl,-rpath,/usr/local/lib -Wl,--enable-new-dtags -lSDL2
// -I 是指示 Compiler 讀取 SDL2 相關 include header file 的路徑,-L 是指示 Linker 連結 SDL2 相關 library file 的路徑及函式庫。
$ ls -las
// Compile 成功會看到 SDLimage.o 執行檔,執行這個檔案:
$ ./SDLimage
// 如果看到一個新的SDL視窗,顯示紅色方塊 1000 msec.(1 second) 就消失,表示 SDL2 測試成功。
// 關於 SDL2 詳細資訊,可google 一下就有很多資料,用來開發 game、跨平台Real-time 應用程式,非常好用,...

// 以上安裝方式在raspberry pi 上執行時會出現問題,出現:SDL2 error: No available video device
// 在raspberry pi 上要使用 SDL2 開發應用程式,必須 安裝 X11 才可以顯示 SDL2 視窗

回覆文章