SDL移植

来源:互联网 发布:南京大学网络本科报名 编辑:程序博客网 时间:2024/04/30 05:34

SDL移植

注:此贴转自我们以前的Google协作平台!



  • 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(),该函数可以让您访问底层驱动程序的专用窗口信息。

  • 在PC机上安装SDL开发环境
和Linux下其他的软件库一样,SDL同样具有很强的移植性!我们所要做的就是在PC机上编写应用程序,调试通了以后就可以交叉编译移植到ARM板子上。到http://www.libsdl.org/download-1.2.php下载SDL-1.2.13 (stable),然后进行安装,由于后面的交叉编译的是`tar.xx`
源码包,所以建议在PC机上使用`tar.xx`包进行安装。

安装前请先查看是否安装有SDL,如果有请先卸载,如果你的系统使用的是`rpm软件安装包管理器`可以使用下面的命令进行查看:
# rpm -qa |grep SDL
如果使用`dpkg软件包管理器`,可以使用:
# dpkg -s SDL

下一步开始安装,这里以SDL-1.2.13.tar.gz为例:
# cd /tmp
# wget http://www.libsdl.org/release/SDL-1.2.13.tar.gz
# tar zxf SDL-1.2.13.tar.gz
# cd SDL-1.2.13
# ./configure --help

使用上面这条命令用来查看`configure`选项信息,然后在这些选项中筛选必要的选项。
# ./configure --prefix=/usr/local/SDL  --disable-video-x11  2>&1 | tee conf_log
`--prefix=/usr/local/SDL`是SDL的安装目录,此目录可以自己设定。
由于我的系统没有x11的开发环境,并且也不会用到SDL操作x11,因此我使用了`--disable-video-x11`这个选项。
参数`2>&1 | tee conf_log`的意思是把configure的信息输出到终端的同时写入到`conf_log`中,这个参数很有用,我们可以不用一直
盯着屏幕看是否报错,等编译完成后直接查看`conf_log`这个文件即可,以后在`configure`、`make`等操作时,建议使用这个参数。
如果没有错误,执行:
# make 2>&1 | tee make_log
# make install

OK.PC 机上SDL安装完成。下面编译SDL的例子程序做测试:
# cd test
# ./configure --with-sdl-prefix=/usr/local/SDL
# make
# ./testwin

如果在屏幕上出现一张图片闪过说明SDL编译成功。


  • 交叉编译SDL库
由于ARM板的资源有限,不可能把所有的选项都开启,因此我们需要根据实际情况进行选择,下面的选项一般可以满足我们的要求:
# ./configure --prefix=/work/SDL_arm CC=arm-linux-gcc  --host=arm-linux --target=linux --disable-debug --disable-cdrom --disable-esd --disable-arts  --disable-arts-shared --disable-diskaudio --disable-nas --disable-esd-shared --disable-mintaudio --disable-nasm --disable-video-x11 --disable-video-dga  --disable-dga --disable-video-ps2gs --disable-video-xbios --disable-video-gem --disable-video-opengl --disable-directx --disable-stdio-redirect --disable-osmesa-shared 2>&1 | tee conf_log
如果没有报错就可以进行编译:
# make 2>&1 | tee make_log
如果报错的话就需要根据出错信息调整一下`configure`的选项参数后编译(参数调整后没有必要`make clean`,直接`make` 就行了,make工具会智能的探寻哪些目标需要编译)。如果没有错误就可以`make install`了。
# make install

下一步测试交叉编译的SDL库是否能在ARM上正常使用。
交叉编译SDL的例子程序
# cd test
# ./configure CC=arm-linux-gcc --host=arm-linux --with-sdl-prefix=/work/SDL_arm
# make

如果报错的话,根据错误提示进行修改。

把交叉编译的库通过nfs服务器共享到ARM板。
# cp /work/SDL_arm/lib/libSDL-1.2.so.0.11.2 $NFS_ROOTDIR
# cp ./testwim $NFS_ROOTDIR


做SDL库文件的软链接(SDL动态库使用libSDL-1.2.so.0这个名字提供服务)。
# cd $NFS_ROOTDIR
# ln -s libSDL-1.2.so.0.11.2 libSDL-1.2.so.0


执行下列操作:
  • 启动nfs服务器
  • 启动ARM
  • 通过minicom登录ARM
  • 挂载nfs共享文件夹
  • 运行例子程序`testwin`
如果运行成功就说明移植成功,失败的话不用心慌,认真的参考出错信息查找出错原因。

  • 编写SDL程序