终于让我弄懂了交叉编译sdl的正确方法,这次实测几个sdl的例子,运行的都很正常,也没有出现比较卡的情况,不敢独享,写个教程也让大家试试。 其实devezx上已经有详细的交叉编译方法了,我这里只是总结一下,顺便弄成中文。 首先准备ezxsdl package。去下面网站下载sdl和补丁: http://devezx.czetx.frih.net/index.php?page=ezxsdl 由于这里只编译sdl,所以我们只用准备以下几个文件: sdl-1.2.7.tar.bz2 以及patches and headers for sdl中的 sdl_ezx_patches.tar.gz ezx_headers.tar.gz 然后是编译环境,我是在cygwin下交叉编译的,sdk用的是dev-ezx-2.0,arm-linux的交叉编译环境建立我就不再重复了。最后是准备tmake-1.8,用于生成makefile。 一切准备就绪,下面交叉编译sdl。 1. 在根目录下建立一个叫sdl的目录 cd /sdl mkdir bin etc include lib usr tmp man man/man1 2. 复制dev-ezx-0.2的include和lib目录到对应文件夹 (包括之前从手机里复制出的库文件) cd `where dev-ezx-0.2 is` cd include cp -r * /sdl/include cd ../lib cp -r * /sdl/lib 3. 解压缩 ezx_headers.tar.gz 到/sdl/include/ezx,sdl_ezx_patches.tar.gz 到/sdl 解压缩 sdl-1.2.7.tar.bz2 到/sdl tar xjfv sdl-1.2.7.tar.bz2 4. 为sdl打补丁! 此处最为重要,用alebm整理的sdl(for e680)补丁,才能解决sdl图形程序运行时白屏一闪而过的情况,直接交叉编译sdl是无法正常在e680的ezx系统上运行的。 cd sdl-1.2.7 patch -np1 -i ../agawa-piro-mickey.patch patch -np1 -i ../alebm-sdl127-ezx.patch patch -np1 -i ../mouse.patch 注:4-5步骤可以用附件中的build.sh一次执行,直接复制到/sdl目录中,执行 ./build.sh 即可完成sdl的编译。 5. 运行如下命令配置sdl 执行一下配置命令,在/sdl/arm目录中生成编译好的sdl库和头文件 ./configure --prefix=/sdl/arm --exec-prefix=/sdl/arm --host=arm-linux --disable-debug --enable-cdrom --enable-threads --enable-timers --enable-endian --enable-file --enable-oss --disable-alsa --disable-esd --disable-arts --disable-diskaudio --disable-nas --disable-esd-shared --disable-esdtest --disable-mintaudio --disable-nasm --disable-video-x11 --disable-video-dga --disable-video-fbcon --disable-video-directfb --disable-video-ps2gs --disable-video-xbios --disable-video-gem --disable-video-dummy --disable-video-opengl --enable-input-events --enable-pthreads --disable-video-picogui --enable-video-qtopia --enable-dlopen 接着就是 make make install 然后大功告成! 测试一下吧,sdl的例子都在test目录中躺着呢,只不过要直接在手机上运行需要修改源码中的窗口大小640x480为a780的屏幕大小320x240。 需要注意的是,要编译sdl不仅需要引用sdl的头文件和库,还要在链接时加入 -dmain=sdl_main 和 -lqte-mt -lpthread,不然会提示“segmentation fault”。 附件中有tmake的模版和用于编译链接程序的脚本tgen.sh,用法是将linux-a780-sdl-g++文件夹复制到tmake的lib/qws中,修改其中的相应目录为你的sdl编译路径。然后将tgen.sh放到要编译的sdl程序文件夹中,执行./tgen.sh即可。 关于“segmentation fault”,之前我编译的sdl程序放到手机中运行,都会提示segmentation fault。之后研究了一下别人的makefile,发现是链接时没有加入-dmain=sdl_main 和 -lqte-mt -lpthread 引起的。保险起见,我把cflags改成了这样:tmake_cflags = -pipe -dqws -dmain=sdl_main -d_reentrant 之后问题解决! 附件中有我改好的几个例子和可执行程序,都在sdl_test.rar中。附带一个火焰效果的例子 xflame-1.0.rar,运行起来很流畅! sdl_test.rar中的例子,都有编译好的可执行程序。如果只想测试,比如testalpha这个,可以将目录中的alphi、icon.bmp及libsdl-1.2.so.0复制到手机,按运行qt程序的方法执行程序。 ps:这个例子效果不错 三楼新增一个blockrage-0.2.3,源码和可执行文件都有。 ezxSDL package |