【问题标题】:Building SDL2 with NDK toolchain使用 NDK 工具链构建 SDL2
【发布时间】:2013-02-01 00:34:02
【问题描述】:

我想知道是否有人设法使用 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 一起使用。

我还尝试了不同的配置,在旧线程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 和头文件。

我希望解决方案是一件非常简单明了的事情,我只是没想过......

【问题讨论】:

  • 错误 sn-p 并不是真正的错误。您错过了输入错误,而其中的所有内容都是包含错误的文件。
  • 使用 configure;make 构建 SDL2 理论上应该可以工作,但是没有一个开发者像那样构建它,这就是它被窃听的原因。随时向 Bugzilla bugzilla.libsdl.org 报告您发现的任何错误(和补丁!)您可以尝试的一件事是运行 configure,然后将 include/SDL_config_android.h 复制到 SDL_config.h 之上,然后运行 make,也许可行(SDL_config_android.h 是 Android 的预煮配置头文件,应该有健全的设置)。

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2012-02-25
    • 2019-02-22
    • 2014-06-27
    • 1970-01-01
    • 1970-01-01
    • 2015-05-04
    • 2017-01-16
    • 2012-04-23
    • 2020-01-23
    相关资源
    最近更新 更多