一、SDL的简介
SDL是一个自由的跨平台的多媒体开发包,适用于
游戏、游戏SDK、演示软件、模拟器、
MPEG播放器和其他应用软件。是为数不多的商业游戏开发公司使用的免费软件库之一。它提供跨平台的二维帧缓冲区图形和音频服务,它支持 Linux、Win32 和
BeOS。也不同程度地支持其它平台,包括 Solaris、IRIX、FreeBSD 和 MacOS。除了大量的服务,包括线程、独立于字节存储次序的宏和 CD
音频,SDL
还提供了一个简单的 API,它允许您尽可能接近本机硬件。使用 SDL 有三重优点:稳定、简单和灵活。
二、宿主机上安装SDL
SDL同样具有很强的移植性,我们可以在宿主机上编写应用程序,编译以后就可以交叉编译移植到ARM上执行可执行程序,为了提供SDL交叉编译所需的实验环境,在交叉编译SDL之前,应当先在宿主机安装SDL
终端输入:
sudo apt-get install libsdl1.2-dev
宿主机安装SDL之后,需要安装一些附加软件以满足宿主机对SDL的支持
终端输入:
sudo apt-get install libsdl-image1.2-dev
sudo apt-get install libsdl-mixer1.2-dev
sudo apt-get install libsdl-ttf2.0-dev
sudo apt-get install libsdl-gfx1.2-dev
安装SDL之后,我们执行一个测试程序来检验SDL是否安装成功
程序源码如下:
#include
#include
int main()
{
SDL_Surface* hello = NULL;
SDL_Surface* screen = NULL;
SDL_Init( SDL_INIT_EVERYTHING );
screen = SDL_SetVideoMode( 640, 480, 32, SDL_SWSURFACE );
hello = SDL_LoadBMP( "1.bmp" );
SDL_BlitSurface( hello, NULL, screen, NULL );
SDL_Flip( screen );
SDL_Delay( 5000 );
SDL_Quit();
SDL_FreeSurface( hello );
SDL_Quit();
return 0;
}
在执行程序之前,先将一个bmp文件复制到程序目录,之后使用gcc将源程序编译生成可执行文件
终端输入:gcc -o run test.c -lSDL
程序执行结果如下:
程序运行成功
三、移植SDL到ARM
SDL同样具有很强的移植性,我们可以在宿主机上编写应用程序,编译以后就可以交叉编译移植到ARM上执行可执行程序
将下载的SDL的源码通过VMware的共享文件夹拷贝到Ubuntu下,并将其解压到指定目录(/nfsroot/SDL-arm)
之后进入相关目录,文件夹内容如下:
之后对源码进行配置:
./configure --prefix=/nfsroot/SDL-arm --disable-pulseaudio --disable-video-nanox -disable-video-qtopia --disable-static --enable-shared --disable-video-photon --disable-video-ggi --disable-video-svga --disable-video-aalib --disable-video-dummy --disable-video-dga --disable-arts --disable-esd --disable-alsa --disable-video-x11 --disable-nasm --disable-joystick --disable-input-tslib -enable-video-fbcon --host=arm-none-linux-gnueabi
命令执行结果如下:
之后便会在当前文件夹下生成Makefile文件
终端输入make对源文件进行编译,之后输入make install进行安装
之后便在指定文件夹下生成了相关文件
在当前目录下,编辑SDL的测试程序test.c
之后终端输入:arm-none-linux-gnueabi-gcc test.c -o run -I/nfsroot/SDL-arm/include -L/nfsroot/SDL-arm/lib -lSDL
成功编译之后,便会在当前目录下生成可执行文件run
接下来使用X-shell对ARM板进行连接,更改开发箱的ip地址,使其与宿主机的ip处于一个网段
例如:
开发箱下的终端输入:mountnfs 192.168.1.104:/nfsroot /mnt/nfs
之后执行交叉编译生成的可执行文件,并观察结果
结果如下:
程序运行成功,至此SDL的移植完成