一、SDL的简介

SDL是一个自由的跨平台的多媒体开发包,适用于

游戏、游戏SDK、演示软件、模拟器、

MPEG播放器和其他应用软件。是为数不多的商业游戏开发公司使用的免费软件库之一。它提供跨平台的二维帧缓冲区图形和音频服务,它支持 Linux、Win32 和

BeOS。也不同程度地支持其它平台,包括 Solaris、IRIX、FreeBSD 和 MacOS。除了大量的服务,包括线程、独立于字节存储次序的宏和 CD

音频,SDL

 还提供了一个简单的 API,它允许您尽可能接近本机硬件。使用 SDL 有三重优点:稳定、简单和灵活。


  • 稳定
    如果 SDL 不向 API 提供可靠的支持,那么那些爱好者和商业公司就不能使用它。因为使用了
    SDL,就添加了错误修正并增强了性能,也就加强了 API 的强健性。就像内核开发是分步进行的,SDL 的开发也是分步进行的,其中一部分是可靠稳定的
    API,其它部分是新功能和构思的沙箱。
  • 简单
    SDL 被设计成一个简单的 API,以最少的代码实现您的构思。
  • 灵活
    返回到上面的 Optimum 演示代码示例,只要移植到 SDL,并确定一些数据假设,那么根本不必改动代码,演示就可以在
    Win32、BeOS 和 Linux 控制台上运行了。灵活性的另一方面体现在尽管代码完全是跨平台的,但不会把您和底层实现隔开。SDL 提供了函数
    SDL_GetWMInfo(),该函数可以让您访问底层驱动程序的专用窗口信息。

二、宿主机上安装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 <stdio.h> #include <SDL/SDL.h> 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;  } 

SDL的移植与测试_SDL

在执行程序之前,先将一个bmp文件复制到程序目录,之后使用gcc将源程序编译生成可执行文件

终端输入:gcc -o run test.c -lSDL

SDL的移植与测试_SDL_02


程序执行结果如下:

SDL的移植与测试_ide_03

程序运行成功

三、移植SDLARM

SDL同样具有很强的移植性,我们可以在宿主机上编写应用程序,编译以后就可以交叉编译移植到ARM上执行可执行程序

将下载的SDL的源码通过VMware的共享文件夹拷贝到Ubuntu下,并将其解压到指定目录(/nfsroot/SDL-arm)

SDL的移植与测试_ARM_04

之后进入相关目录,文件夹内容如下:

SDL的移植与测试_ARM_05

之后对源码进行配置:

./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

命令执行结果如下:

SDL的移植与测试_ARM_06

之后便会在当前文件夹下生成Makefile文件

SDL的移植与测试_SDL_07

终端输入make对源文件进行编译,之后输入make install进行安装

SDL的移植与测试_ARM_08

SDL的移植与测试_交叉编译_09

之后便在指定文件夹下生成了相关文件

SDL的移植与测试_ARM_10

在当前目录下,编辑SDL的测试程序test.c

之后终端输入:arm-none-linux-gnueabi-gcc test.c -o run -I/nfsroot/SDL-arm/include -L/nfsroot/SDL-arm/lib -lSDL

成功编译之后,便会在当前目录下生成可执行文件run

SDL的移植与测试_ide_11

接下来使用X-shell对ARM板进行连接,更改开发箱的ip地址,使其与宿主机的ip处于一个网段

例如:

SDL的移植与测试_ARM_10

SDL的移植与测试_ARM_13

开发箱下的终端输入:mountnfs 192.168.1.104:/nfsroot /mnt/nfs

之后执行交叉编译生成的可执行文件,并观察结果

结果如下:

SDL的移植与测试_ide_14

程序运行成功,至此SDL的移植完成