使用NDK工具链构建SDL2

时间:2013-02-15 22:59:27

标签: android-ndk build-process sdl automake toolchain

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

SDL2似乎与发布非常接近(从昨天开始它不再是“UNDER CONSTROCTION: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。 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文档引用--with-sysroot = $ SYSROOT作为可选项,我已经将它包括在内以查看它是否解决了问题,但这没有帮助。 作为最后的努力,我手动编辑Makefile,修复该引用,现在编译器抱怨X11.h. AFAIK Android与X11无关,所以我猜整个构建树完全不适合与NDK一起使用。

我还尝试了一种不同的配置,可在较旧的线程here中找到。 既没有定义-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和头文件。

我希望解决方案是一件非常容易和明显的事情,我只是没想到......

1 个答案:

答案 0 :(得分:2)

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