编译android版本sdl2

Posted colorful_xx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编译android版本sdl2相关的知识,希望对你有一定的参考价值。

一、SDL官网地址:Simple DirectMedia Layer - Homepage

二、SDL git地址:GitHub - libsdl-org/SDL: Simple Directmedia Layer

三、使用工具ndk-build

四、sdl2下载后其代码仓如下所示:

sdl提供了自己的android-project,可以在里面进行android so的编译,编译脚本为Android.mk。

五、android-project结构如下

app目录结构如下其中src为上层java文件,可以通过jni层与下层c代码实现相互调用,其中jni代码在SDL_android.c中

jni目录结构如下所示,其中SDL为自己建立的文件夹用以存放sdl自己的c层代码,src存放自己写的demo 代码。

 

 

五、编译过程

1、在android-project的app、jni下建立SDL文件夹;

2、Application.mk可以控制支出的android版本和需要编译的平台

3、jni根目录的Android.mk会调用所有子文件下的编译脚本进行编译

4、将src、include、Android.mk拷贝至android-project的SDL文件夹下;

5、将jni/src目录下的脚本改成你自己写的文件名称,编译so时可以随便写一个空的main函数

 

6、在jni根目录下执行ndk-build进行编译,编译成功后会在libs文件夹下生成我们需要的so,我只变了arm的版本

 

 

 

 

 

Linux下安装编译SDL

 

  要搞图形界面,SDL是比较好上手的一个库。今天试着在centos下搞了一个SDL的程序。下面是配置的步骤:

  首先yum search SDL,会出现SDL相关的软件包。不过我这里只有SDL1的,没有2的。然后看对了后,install一下。要注意,一定要看清楚是32位的还是64位的,下载和自己系统对应的版本,否则编译会出错。我这里是64位的系统,因此下载64位的版本。

  

yum install SDL-devel.x86_64 SDL_mixer-devel.x86_64 SDL_ttf-devel.x86_64 SDL_image-devel.x86_64 SDL_net-devel.x86_64

 

  我把常用的包都安装上了,如果你有其他需要可以自己调整。

  安装完后,就可以正式写代码了。

 

#include "SDL.h"
#include "SDL_image.h"
#include "SDL_mixer.h"
#include "SDL_ttf.h"
#include "SDL_net.h"

int main()
{
    SDL_Init(SDL_INIT_EVERYTHING);

    SDL_Quit();
    return 0;
}

  保存代码为test1.cpp

  编译的时候,需要额外添加sdl的头文件路径、链接库路径和链接库。我的系统中,头文件在 /usr/include/SDL 下,而链接库在 /usr/lib下。

  编译命令:

  

gcc test1.cpp -I/usr/include/SDL -L/usr/lib -lSDL -lSDL_image -lSDL_mixer -lSDL_ttf -lSDL_net -lstdc++ -otest1.a

 

  这里要注意,-lstdc++ 这个库不能省,否则会报错。

  如果没有任何提示,那么恭喜,编译成功啦。

  还要提示一点,SDL程序的运行时需要相关库的支持的。不过还有一个static的SDL编译库,留给读者自己探索。

  最后总结几个常见的问题:

  如果gcc报告一大堆undefined,比如什么 Uint8 不能命名,类型未定义等等,看看是不是忘记加 -lstdc++

  如果报告 libSDL.so 不完整或打不开,看看是不是选择了系统对应的64或32位版本。如果和系统不相同,那么编译是不能通过的。

  

以上是关于编译android版本sdl2的主要内容,如果未能解决你的问题,请参考以下文章

主流音视频芯片交叉编译工具链版本

主流音视频芯片交叉编译工具链版本

Android 音视频开发之交叉编译

Mac中编译FFmpeg教程(Android版)

Android音视频开发 ->搭建开发环境

音视频交叉编译动态库静态库的学习