我想知道是否有人设法使用 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-turbo v8 和 SDL_image。配置脚本识别交叉编译器,并构建 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 文档将 --with-sysroot=$SYSROOT 称为可选,我已将其包含在内以查看它是否解决了问题,但这没有帮助。作为最后的努力,我手动编辑了 Makefile,修复了该引用,现在编译器抱怨 X11.h。AFAIK Android 与 X11 无关,所以我猜整个构建树完全不适合与 NDK 一起使用。
我也尝试了不同的配置,在这里的旧线程中找到。既没有定义 -DANDROID -mandroid -fomit-frame-pointer 也没有改回 -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 源代码与项目一起编译是唯一可行但丑陋的解决方案。我想通过 make install 部署必要的 lib 和头文件。
我希望解决方案是我没有想到的非常简单和明显的事情......