我想知道是否有人设法使用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似乎没有使用那些。此外,SDL不能附带Makefile.ac或Makefile.am,并且无法使用其他平台的模板作为创建我自己的makefile的良好起点。另外,我从来没有处理过makefile文件,我真的没有机会解决这些问题。即使成功,我也可能需要配置工具,因为我不知道ndk-build如何在没有配置脚本的情况下设法安装SDL2。

将SDL源代码与项目一起编译是唯一可行的解​​决方案,但是却很丑陋。我想通过make install部署必要的lib和头文件。

我希望解决方案是一件我从未想到过的真正简单明了的事情...

最佳答案

此问题已在http://hg.libsdl.org/SDL/rev/4e57cfd9fca8中修复,并在2.0.4版本中得到了预期。请注意,有一些较新的修订版,其中包含有关定义的一些相关修补程序。

关于android-ndk - 使用NDK工具链构建SDL2,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14904791/

10-13 07:09