SDL及扩展库在ARM-Linux 完整移植
SDL的正確運行需要大量的支持庫
?
1.編譯安裝支持庫
在ARM-LINUX編譯SDL之前.需要編譯如下安裝庫.
常見的庫的iconv,zlib,freetype等都要
SDL支持庫的移植參見.我的博客文章.<<ARM Linux下一些常用庫的移植 >>
http://blog.chinaunix.net/u3/105675/showart_2195157.html
?
?
2.了解硬件支持.
? 2.1 tslib移植(確認觸摸屏是否工作正常)
?? 參見?http://blog.chinaunix.net/u3/105675/showart_2145447.html
??2.2 確認開發板音頻驅動采用哪一種類型(OSS還是ALSA)
??2.3 確認視頻輸出采用哪一種類型(不出意外是Frame Buffer)
? 2.4 是否加入opengl的支持.
?
項目目錄,也將放在common_lib的庫的一部分。所有庫放在/home/hxy/common_lib/SDL 目錄下
?
????????
?2.SDL的移植
??1.解壓
tar xvzf SDL-1.2.14.tar.gz ; cd SDL-1.2.14
?2.生成configure 腳本
?
|
? |
關鍵參數解釋
- ?? ?--enable-input-tslib #支持tslib 觸摸屏
- ??? --disable-x11 --enable-video-fbcon #關閉X11支持,打開framebuffer LCD輸出
- ??? --disable-alsa #音頻使用oss,如果使用--enable-alsa,必須先編譯alsa-libs
- ??? --host=arm-linux #使用arm-linux-gcc編譯工具.???
- ????--prefix=$PWD/../../output/arm_linux? #SDL安裝目錄
- ????--disable-joystick #去掉游戲杠支持
- CPPFLAGS,LDFLAGS主要是為 --enable-input-tslib準備。否則在依賴文件里(.libs/libSDL.lai)會采用 dependency_libs=' -lm /usr/local/lib/libts.la -ldl -lpthread'這樣在ARM版明顯錯誤。如果對觸摸屏輸入不敏感,可以直接 --disable-input-tslib
- 而-liconv因為在掃描目錄也有libiconv,這樣自動加入依賴。以免編譯其它SDL依賴庫出錯。
??3.編譯
???? make
? 4.安裝
??? make install
5.SDL測試程序移植
? SDL的測試程序在SDL源碼目錄的test目錄下。
?? 執行如下的configure 腳本生成Makefile
| NM=arm-linux-nm LD=arm-linux-ld CC=arm-linux-gcc CXX=arm-linux-g++? AR=arm-linux-ar ./configure --host=arm-linux --prefix=$PWD/../../../output/arm_linux |
Makefile默認是編譯所有測試程序,但是在ARM上,游戲桿和opengl測試無法編譯通過,要從TARGETS去掉
?? testgl,testjoystick的編譯.
??另外,默認的測試的路徑指向是X86版,最簡單的辦法,可以手工修改Makefile調成ARM版
| CFLAGS? = -g -O2 -I/usr/local/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT -I/usr/include -DHAVE_OPENGL LIBS??? =? -L/usr/local/lib -Wl,-rpath,/usr/local/lib -lSDL -lpthread -liconv |
改成
| SDL_DIR = /home/hxy/common_lib/arm-linux CFLAGS? = -g -O2 -I$(SDL_DIR)/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT? LIBS??? =? -L$(SDL_DIR)/lib? -lSDL -lpthread |
????????
6.SDL程序的測試
?? SDL的運行時必須指定MOUSE設備.如使用tslib,則用如下命令設置SDL使用tslib.
????export SDL_MOUSEDRV=TSLIB
? 如果沒有任何輸入設備,則環境變量?export SDL_NOMOUSE=1?,否則初始化會提示
? Couldn't initialize SDL:Unable to open mouse
?
可以用SDL自帶的testalpha來測試是否SDL下tslib是否正常工作.運行這個程序,如果在點擊處準確出現黃色色塊,表示tslib與SDL配合完合成功,以下是在320*240 bpp=16的開發板的實測的截圖.
?
?
|
?
3.SDL_image移植
- 下載:http://www.libsdl.org/projects/SDL_image/release/SDL_image-1.2.10.tar.gz
- 解壓 tar xvzf SDL_image-1.2.8.tar.gz
- ?cd SDL_image-1.2.8
- 生成 configure? ,執行 ./autogen.sh
- 生成Makefile
?
?
| ./configure --enable-shared? --enable-static --host=arm-linux --prefix=$PWD/../../output/arm-linux? --enable-bmp? --enable-gif? --enable-jpg --enable-png --enable-tif? --enable-pnm --enable-xpm? --disable-sdltest SDL_CFLAGS="-I$PWD/../../output/arm-linux/include/SDL"?? SDL_LIBS="-L$PWD/../../output/arm-linux/lib -lSDL" LIBPNG_CFLAGS="-I$PWD/../../output/arm-linux/include"?? LIBPNG_LIBS="-L$PWD/../../output/arm-linux/lib -lpng" CPPFLAGS="-I$PWD/../../output/arm-linux/include"?? LDFLAGS="-L$PWD/../../output/arm-linux/lib -ltiff -ljpeg -lts -liconv" |
?
注意這里提示報錯
?
| configure: error: in `/home/huisen/libs/SDL_image-1.2.8': configure: error: C compiler cannot create executables |
?
最大可能性中間某一些庫沒有移植,比如libtiff,要先移植好庫再使用SDL_image
實測發布發現libtiff還是尺寸較大。因此可以用如下語句取消對tiff的支持
?
| ./configure --enable-shared? --enable-static --host=arm-linux --prefix=$PWD/../../output/arm-linux? --enable-bmp? --enable-gif? --enable-jpg --enable-png --disable-tif? --enable-pnm --enable-xpm? --disable-sdltest SDL_CFLAGS="-I$PWD/../../output/arm-linux/include/SDL"?? SDL_LIBS="-L$PWD/../../output/arm-linux/lib -lSDL" LIBPNG_CFLAGS="-I$PWD/../../output/arm-linux/include"?? LIBPNG_LIBS="-L$PWD/../../output/arm-linux/lib -lpng" CPPFLAGS="-I$PWD/../../output/arm-linux/include"?? LDFLAGS="-L$PWD/../../output/arm-linux/lib? -ljpeg -lts -liconv" |
?
?
編譯 make
安裝 make install
?
4.SDL_Net 移植
?
SDL網絡處理.
主頁:http://www.libsdl.org/projects/SDL_net/
解壓: tar xvzf SDL_net-1.2.7.tar.gz
?cd SDL_net-1.2.7
生成Makefile
?./configure --host=arm-linux --prefix=$PWD/../../output/arm-linux
編譯 make
安裝 make install
?
?
5.SDL_ttf 移植
?SDL對 TrueType 字體處理。
- 主頁?http://www.libsdl.org/projects/SDL_ttf/
- 解壓 tar xvzf SDL_ttf-2.0.9.tar.gz
cd SDL_ttf-2.0.9
生成Makefile
??
| ./configure --host=arm-linux --prefix=$PWD/../../output/arm-linux --enable-shared --enable-static --disable-sdltest --with-freetype-prefix=$PWD/../../output/arm-linux/ --with-sdl-prefix=$PWD/../../output/arm-linux/ CFLAG="-I$PWD/../../output/arm-linux/include" LDFLAGS="-L$PWD/../../output/arm-linux/lib -lSDL -lts -liconv -lfreetype" |
- 修改Makefile,把語句當中的去掉opengl支持(這可能是這一版的BUG)
?1)GL_LIBS =? -L/usr/lib -lGL
這一句改成 GL_LIBS =
因為SDL_ttf會掃描桌面機的opengl庫,并將其庫路徑加入其中,configure 未提供選項開關去掉這個選擇,只能手工關掉。
?
? 2)glfont_LDADD = libSDL_ttf.la? -L/usr/lib -lGL -lm
? 這一句修改成 glfont_LDADD = libSDL_ttf.la? -lm
?
? 3)去掉 CFLAGS中 -I/usr/include?-DHAVE_OPENGL
- 修改源碼
在編譯前,注意去掉 glfont.c 這個源碼,它是測試opengl 3D字體的。需要用opengl.大部分應用用不上,強行編譯會提示/usr/local/arm/4.3.2/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.2/../../../../arm-none-linux-gnueabi/bin/ld: cannot find -lGL
我的解決辦法是,把glfont.c 改名為 glfont_old.c.新建一個只有一個空的main()的glfont.c
?
編譯Make
安裝Make install
?
6.SDL_mixer 移植
?SDL對于音頻的處理。
? 主頁:http://www.libsdl.org/projects/SDL_mixer/
?? 這里需要移植好 libmad 庫。原理參見我的博客文章。
?<<SDL編程教程--SDL_mixer播放音樂>>
http://blog.chinaunix.net/u3/105675/showart_2096192.html
?
解壓: tar xvzf SDL_mixer-1.2.9.tar.gz
?cd SDL_mixer-1.2.9
生成Makefile
| ./configure?--enable-music-mp3-mad-gpl --enable-music-mp3=no?--host=arm-linux --prefix=$PWD/../../output/arm-linux --with-sdl-prefix=$PWD/../../output/arm-linux --enable-shared --enable-static |
編譯
? make
安裝
? make install
??
?
7。SDL_rtf移植
主頁:http://www.libsdl.org/projects/SDL_rtf/
解壓:tar xvzf SDL_rtf-0.1.0.tar.gz
? cd SDL_rtf-0.1.0
生成Makefile
??
??
| ?./autogen.sh ./configure? --host=arm-linux --prefix=$PWD/../../output/arm-linux --with-sdl-prefix=$PWD/../../output/arm-linux --enable-shared --enable-static??--enable-SDL_ttf |
編譯 make
安裝 make install
?
? 8.SDL_gfx移植
主頁:http://www.ferzkopp.net/Software/SDL_gfx-2.0/
解壓:tar xvzf SDL_gfx-2.0.20.tar.gz
cd SDL_gfx-2.0.20
生成Makefile
??
| ?./configure? --host=arm-linux --prefix=$PWD/../../output/arm-linux --with-sdl-prefix=$PWD/../../output/arm-linux --enable-shared --enable-static?--enable-mmx=no |
編譯 make
安裝 make install
?
http://blog.51cto.com/tonghuix/1165839
總結
以上是生活随笔為你收集整理的SDL及扩展库在ARM-Linux 完整移植的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【译】Why Wayland on An
- 下一篇: 迁移学习简介(tranfer learn