android ndk-使用ndk工具链构建SDL2



我想知道是否有人用Android NDK(r8d)的工具链构建了新的SDL2。

SDL2似乎离发布已经很近了(因为昨天它不再是"正在建设中:http://hg.libsdl.org/SDL/rev/0a3d2ec7af6d)。它附带了一个Android.mk,只需按照捆绑的README.Android文件中的说明进行编译即可。我的问题是,是否真的没有可用的基于automake的构建,或者可以在Android上编译它,或者我的工具链设置有问题?

我已经按照$NDK/doc/STANDALONE-toolchain.html文档的说明安装了NDK工具链。我使用的是gcc 4.6。这是我使用的一个环境:

#!/bin/sh
export TOOLCHAIN=$HOME/Android/android-14-arm
export PATH=$TOOLCHAIN/bin:$PATH
export SYSROOT=$TOOLCHAIN/sysroot
export CROSS_COMPILE="arm-linux-androideabi"
export CC=$CROSS_COMPILE-gcc
export CXX=$CROSS_COMPILE-g++
export CPP=$CROSS_COMPILE-cpp
export CFLAGS="-march=armv7-a -mfloat-abi=softfp -mfpu=neon"
export LDFLAGS="-march=armv7-a -Wl,--fix-cortex-a8"
echo "Compiler set up for ARM 14"

配置参数:

./configure --host=arm-linux-androideabi --prefix=$SYSROOT/usr/local

使用相同的配置,我成功地构建了libjpeg-turbov8和SDL_image。configure脚本识别了交叉编译器,并构建了makefile,但它找到了X11支持,看不到OpenGL ES…make失败:

In file included from /usr/include/features.h:378:0,
             from /usr/include/sys/types.h:27,
             from ./include/SDL_stdinc.h:35,
...

我查看了配置日志,不知道"/usr/include"是从哪里来的。但实际上,生成的makefile将EXTRA_CFLAGS中的那一行添加到编译器中。NDK文档引用了sysroot=$sysroot作为可选项,我已经将其包括在内,看看它是否解决了问题,但这并没有帮助。作为最后一项工作,我手动编辑了Makefile,修复了该引用,现在编译器抱怨X11.h。AFAIK Android与X11无关,所以我想整个构建树完全不适合与NDK一起使用。

我还尝试了一种不同的配置,可以在这里的一个旧线程中找到。既没有定义-DANDROID-mandroid-fomit帧指针,也没有改回-march=armv7-a-mfloat abi=softfp-mfpu=vfp-mthumb"解决了问题

在以前的项目中,我必须刷新config.guess和config.sub才能识别我的编译器。SDL似乎没有使用这些。此外,没有Makefile.ac或Makefile.am可以与SDL一起使用,也没有其他平台的模板可以作为创建自己的Makefile的良好起点。此外,我从来没有处理过makefile,我真的没有机会解决这些问题。即使它成功了,我也可能需要一个配置工具,因为我不知道ndk-build如何在没有配置脚本的情况下安装SDL2。

将SDL源代码与项目一起编译是唯一有效但丑陋的解决方案。我想通过makeinstall来部署必要的lib和头文件。

我希望解决方案是一件非常简单和明显的事情,我只是没有想过。。。

此问题已在http://hg.libsdl.org/SDL/rev/4e57cfd9fca8预计2.0.4版本。请注意,有更新的修订版,其中包含一些有关defines的相关修复。