•SDL簡(jiǎn)介
SDL是一個(gè)自由的跨平臺(tái)的多媒體開(kāi)發(fā)包,適用于 游戲、游戲SDK、演示軟件、模擬器、 MPEG播放器和其他應(yīng)用軟件。是為數(shù)不多的商業(yè)游戲開(kāi)發(fā)公司使用的免費(fèi)軟件庫(kù)之一。它提供跨平臺(tái)的二維幀緩沖區(qū)圖形和音頻服務(wù),它支持 Linux、Win32 和 BeOS。也不同程度地支持其它平臺(tái),包括 Solaris、IRIX、FreeBSD 和 MacOS。除了大量的服務(wù),包括線程、獨(dú)立于字節(jié)存儲(chǔ)次序的宏和 CD 音頻,SDL
還提供了一個(gè)簡(jiǎn)單的 API,它允許您盡可能接近本機(jī)硬件。使用 SDL 有三重優(yōu)點(diǎn):穩(wěn)定、簡(jiǎn)單和靈活。
•穩(wěn)定 。如果 SDL 不向 API 提供可靠的支持,那么那些愛(ài)好者和商業(yè)公司就不能使用它。因?yàn)槭褂昧?SDL,就添加了錯(cuò)誤修正并增強(qiáng)了性能,也就加強(qiáng)了 API 的強(qiáng)健性。就像內(nèi)核開(kāi)發(fā)是分步進(jìn)行的,SDL 的開(kāi)發(fā)也是分步進(jìn)行的,其中一部分是可靠穩(wěn)定的 API,其它部分是新功能和構(gòu)思的沙箱。
•簡(jiǎn)單 。SDL 被設(shè)計(jì)成一個(gè)簡(jiǎn)單的 API,以最少的代碼實(shí)現(xiàn)您的構(gòu)思。
•靈活 。返回到上面的 Optimum 演示代碼示例,只要移植到 SDL,并確定一些數(shù)據(jù)假設(shè),那么根本不必改動(dòng)代碼,演示就可以在 Win32、BeOS 和 Linux 控制臺(tái)上運(yùn)行了。靈活性的另一方面體現(xiàn)在盡管代碼完全是跨平臺(tái)的,但不會(huì)把您和底層實(shí)現(xiàn)隔開(kāi)。SDL 提供了函數(shù) SDL_GetWMInfo(),該函數(shù)可以讓您訪問(wèn)底層驅(qū)動(dòng)程序的專用窗口信息。
•在PC機(jī)上安裝SDL開(kāi)發(fā)環(huán)境
和Linux下其他的軟件庫(kù)一樣,SDL同樣具有很強(qiáng)的移植性!我們所要做的就是在PC機(jī)上編寫應(yīng)用程序,調(diào)試通了以后就可以交叉編譯移植到ARM板子上。到
http://www.libsdl.org/download-1.2.php 下載SDL-1.2.13 (stable),然后進(jìn)行安裝,由于后面的交叉編譯的是`tar.xx`
源碼包,所以建議在PC機(jī)上使用`tar.xx`包進(jìn)行安裝。
安裝前請(qǐng)先查看是否安裝有SDL,如果有請(qǐng)先卸載,如果你的系統(tǒng)使用的是`rpm軟件安裝包管理器`可以使用下面的命令進(jìn)行查看:
# rpm -qa |grep SDL
如果使用`dpkg軟件包管理器`,可以使用:
# dpkg -s SDL
下一步開(kāi)始安裝,這里以SDL-1.2.13.tar.gz 為例:
# cd /tmp
# wget
http://www.libsdl.org/release/SDL-1.2.13.tar.gz# tar zxf SDL-1.2.13.tar.gz
# cd SDL-1.2.13
# ./configure --help
使用上面這條命令用來(lái)查看`configure`選項(xiàng)信息,然后在這些選項(xiàng)中篩選必要的選項(xiàng)。
# ./configure --prefix=/usr/local/SDL --disable-video-x11 2>&1 | tee conf_log
`--prefix=/usr/local/SDL`是SDL的安裝目錄,此目錄可以自己設(shè)定。
由于我的系統(tǒng)沒(méi)有x11的開(kāi)發(fā)環(huán)境,并且也不會(huì)用到SDL操作x11,因此我使用了`--disable-video-x11`這個(gè)選項(xiàng)。
參數(shù)`2>&1 | tee conf_log`的意思是把configure的信息輸出到終端的同時(shí)寫入到`conf_log`中,這個(gè)參數(shù)很有用,我們可以不用一直
盯著屏幕看是否報(bào)錯(cuò),等編譯完成后直接查看`conf_log`這個(gè)文件即可,以后在`configure`、`make`等操作時(shí),建議使用這個(gè)參數(shù)。
如果沒(méi)有錯(cuò)誤,執(zhí)行:
# make 2>&1 | tee make_log
# make install
OK.PC 機(jī)上SDL安裝完成。下面編譯SDL的例子程序做測(cè)試:
# cd test
# ./configure --with-sdl-prefix=/usr/local/SDL
# make
# ./testwin
如果在屏幕上出現(xiàn)一張圖片閃過(guò)說(shuō)明SDL編譯成功。
•交叉編譯SDL庫(kù)
由于ARM板的資源有限,不可能把所有的選項(xiàng)都開(kāi)啟,因此我們需要根據(jù)實(shí)際情況進(jìn)行選擇,下面的選項(xiàng)一般可以滿足我們的要求:
# ./configure --prefix=/work/SDL_arm CC=arm-linux-gcc --host=arm-linux --target=linux --disable-debug --disable-cdrom --disable-esd --disable-arts --disable-arts-shared --disable-diskaudio --disable-nas --disable-esd-shared --disable-mintaudio --disable-nasm --disable-video-x11 --disable-video-dga --disable-dga --disable-video-ps2gs --disable-video-xbios --disable-video-gem --disable-video-opengl --disable-directx --disable-stdio-redirect --disable-osmesa-shared 2>&1 | tee conf_log
如果沒(méi)有報(bào)錯(cuò)就可以進(jìn)行編譯:
# make 2>&1 | tee make_log
如果報(bào)錯(cuò)的話就需要根據(jù)出錯(cuò)信息調(diào)整一下`configure`的選項(xiàng)參數(shù)后編譯(參數(shù)調(diào)整后沒(méi)有必要`make clean`,直接`make` 就行了,make工具會(huì)智能的探尋哪些目標(biāo)需要編譯)。如果沒(méi)有錯(cuò)誤就可以`make install`了。
# make install
下一步測(cè)試交叉編譯的SDL庫(kù)是否能在ARM上正常使用。
交叉編譯SDL的例子程序
# cd test
# ./configure CC=arm-linux-gcc --host=arm-linux --with-sdl-prefix=/work/SDL_arm
# make
如果報(bào)錯(cuò)的話,根據(jù)錯(cuò)誤提示進(jìn)行修改。
把交叉編譯的庫(kù)通過(guò)nfs服務(wù)器 共享到ARM板。
# cp /work/SDL_arm/lib/libSDL-1.2.so.0.11.2 $NFS_ROOTDIR
# cp ./testwim $NFS_ROOTDIR
做SDL庫(kù)文件的軟鏈接(SDL動(dòng)態(tài)庫(kù)使用libSDL-1.2.so.0這個(gè)名字提供服務(wù))。
# cd $NFS_ROOTDIR
# ln -s libSDL-1.2.so.0.11.2 libSDL-1.2.so.0
執(zhí)行下列操作:
•啟動(dòng)nfs服務(wù)器
•啟動(dòng)ARM
•通過(guò)minicom 登錄ARM
•掛載nfs共享文件夾
•運(yùn)行例子程序`testwin`
如果運(yùn)行成功就說(shuō)明移植成功,失敗的話不用心慌,認(rèn)真的參考出錯(cuò)信息查找出錯(cuò)原因。