移植SDL到android

参考:http://blog.csdn.net/banyao2006/archive/2011/01/10/6126247.aspx

环境:
- Cygwin 1.7
- Android NDK:android-ndk-r4b-windows
- SDL:1.2.14


1.下载SDL 1.2.14,将其解压到ndk的samples目录,并将文件夹改为SDL。
   那么源码的位置是:/home/Administrator/android-ndk-r4b-windows/android-ndk-r4b/samples/SDL
2 .修改SDL中的Makefile.minimal,内容如下:
# Makefile to build the SDL library
PREBUILT = /home/Administrator/android-ndk-r4b-windows/android-ndk-r4b/build/prebuilt/windows/arm-eabi-4.4.0
INCLUDE = -I./include  -I/home/Administrator/android-ndk-r4b-windows/android-ndk-r4b/build/platforms/android-8/arch-arm/usr/include -I/usr/include
CFLAGS  = -g -O2 $(INCLUDE)
CC  = $(PREBUILT)/bin/arm-eabi-gcc
AR  = $(PREBUILT)/bin/arm-eabi-ar
RANLIB  = $(PREBUILT)/bin/arm-eabi-ranlib

CONFIG_H = include/SDL_config.h
TARGET  = libSDL.a
SOURCES = src/*.c src/audio/*.c src/cdrom/*.c  src/cpuinfo/*.c src/events/*.c src/file/*.c src/joystick/*.c src/stdlib/*.c src/thread/*.c src/timer/*.c src/video/*.c src/audio/dsp/*.c src/audio/dma/*.c src/video/fbcon/*.c src/joystick/dummy/*.c src/cdrom/dummy/*.c  src/thread/generic/*.c src/timer/unix/*.c src/loadso/dummy/*.c \

OBJECTS = $(shell echo $(SOURCES) | sed -e 's,\.c,\.o,g')
all: $(TARGET)
$(TARGET): $(CONFIG_H) $(OBJECTS)
    $(AR) crv $@ $^
    $(RANLIB) $@
$(CONFIG_H):
    cp $(CONFIG_H).default $(CONFIG_H)
clean:
    rm -f $(TARGET) $(OBJECTS)
3.修改SDL/include/SDL_config_minimal.h,内容如下:
#ifndef _SDL_config_minimal_h
#define _SDL_config_minimal_h

#include "SDL_platform.h"

/* This is the minimal configuration that can be used to build SDL */

#include <stdarg.h>
/*
typedef signed char int8_t;
typedef unsigned char uint8_t;
typedef signed short int16_t;
typedef unsigned short uint16_t;
typedef signed int int32_t;
typedef unsigned int uint32_t;
typedef unsigned int size_t;
typedef unsigned long uintptr_t;
*/
#define SDL_AUDIO_DRIVER_OSS    1
#define SDL_CDROM_DISABLED  1
#define SDL_JOYSTICK_DISABLED   1
#define SDL_LOADSO_DISABLED 1
#define SDL_THREADS_DISABLED    1
#define SDL_TIMER_UNIX  1
#define SDL_VIDEO_DRIVER_FBCON  1
#define HAVE_STDIO_H 1
#endif /* _SDL_config_minimal_h */
4.修改 SDL_fbvideo.c
  由于Android的framebuffer设备是 /dev/graphics/fb0 (Linux是 /dev/fb0),所以我们需要修改 ./src/video/fbcon/SDL_fbvideo.c。
  将文件中所有的/dev/fb0全都替换成/dev/graphics/fb0

5.进行编译
  在 Cygwin下進入SDL的根目录,执行:

    make -f Makefile.minimal
  编译成功之后,会产生libSDL.a

编译中可能遇到的问题:
1. compiler认为SDL_dummy_enum的size不合法:
./include/SDL_stdinc.h:151: error: size of array 'SDL_dummy_enum' is negative
 解决办法:將SDL_stdinc.h的151行注释掉:
//SDL_COMPILE_TIME_ASSERT(enum, sizeof(SDL_DUMMY_ENUM) == sizeof(int));

2.重新make的时候,可能会有问题,最好先clean,然后make
3.修改文件之后,要转换成unix格式,要注意换行和空格符'\'。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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库输入
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值