SDL的移植与测试

一、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;

} 

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

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

 

程序执行结果如下:

程序运行成功

三、移植SDLARM

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的移植完成

 

SDL2.2.0.1的移植,包含SDL的每个参数的意思,包含交叉编译器的安装,包含移植过程中出错的处理方法。 --prefix=/usr/arm 安装SDL路径 --enable-shared=yes 构建共享库[开启] --enable-nasm 装配blitters x86上的nasm(汇编器) --enable-oss 启用支持oss声音的API --enable-alsa 启用支持ALSA声音的API --enable-alsa-shared 启用动态加载ALSA声卡的API --enable-pulseaudio 启用pulseaudio(脉冲音频) --enable-pulse-shared 启用动态加载脉冲音频支持 --enable-arts 启用支持Analog Read Time Synthesizer(模拟实时合成器) --enable-arts-shared 启用动态加载ARTS声卡的支持 --enable-joystick 启用joystick(控制杆)系统 --enable-cdrom 启用只读光盘系统[关闭] --enable-threads 启用多线程子系统 --enable-timers 启用计时器子系统 --enable-endian 大小端设置 --enable-file 启用文件系统 --enable-esd 支持Enlightened(文明)声音后台程序 --enable-nas 支持NAS(网络连接存储)声卡API --enable-diskaudio 支持磁盘写入声卡驱动 --enable-dummyaudio 支持虚拟声卡驱动 --enable-altivec 使用altivec装配位块传送器在PPC上 --enable-video-x11 使用x11视频驱动 --enable-dga 允许使用x1 DGA代码 --enable-video-x11-vm 使用x11 vm延长全屏 --enable-video-x11-dgamouse 使用x11 DGA鼠标事件 --enable-video-x11-xv 使用x11 xv音像延长视频 --enable-video-x11-xinerama 启动x11多银幕支持 --enable-video-dga 使用DGA2.0视频驱动 --enable-video-directfb 启用DirectFB视频驱动 --enable-video-photon 使用QNX(嵌入式实时系统)光子视频驱动 --enable-video-ps2gs 使用PS(游戏机)2 GS视频驱动 --enable-video-opengl 包括OpenGL(开放图形语言)创建上下文 --enable-video-pth 使用GNU pth库对多线程 --enable-pthreads 使用POSIX线程(可移植操作系统)对多线程 --enable-pthread-sem 使用多线程信号 --enable-input-events 使用Linux-2.4统一输入接口 --enable-input-tslib 使用Touchscreen库输入
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值