使用支持 Objective-C 的 gcc 错误编译 Android NDK

Posted

技术标签:

【中文标题】使用支持 Objective-C 的 gcc 错误编译 Android NDK【英文标题】:Compiling Android NDK with Objective-C-enabled gcc errors 【发布时间】:2012-10-15 21:10:38 【问题描述】:

我正在使用 Jackie Gleason's presentation 来让 Objective-c 在 android 上编译,以及 Michael f1337's blog post 在同一主题上进行编译(另外在 Mac OS X 上工作,我就是这样)。他们的帖子和我的主要区别在于我正在努力使用最新的 NDK (r8b)。我已按照以下步骤操作:

1) 在此处下载最新的 NDK:http://developer.android.com/tools/sdk/ndk/index.html

2) 创建一个名为 NDK 的目录,并在此处解压下载。

3) 在 NDK 目录下,创建文件夹 toolchain-src。 cd 到这个目录。

4) 下载工具链:

git clone https://android.googlesource.com/toolchain/build.git
git clone https://android.googlesource.com/toolchain/gmp.git
git clone https://android.googlesource.com/toolchain/gdb.git
git clone https://android.googlesource.com/toolchain/mpc.git
git clone https://android.googlesource.com/toolchain/mpfr.git

5) 创建目录 binutils。 cd 到这个目录。

6) 在此处下载最新的 binutils tar 球:http://ftp.gnu.org/gnu/binutils/

7) 解压文件到当前目录。

8)回到toolchain-src目录,创建目录gcc。

9) 下载一个支持objective c的gcc(用gcc-4.6.1测试)http://ftp.gnu.org/gnu/gcc/

10) 将此文件解压到 gcc 文件夹中,然后导航回 toolchain-src 目录

11) cd 到构建目录,并编辑 Makefile.in 文件,更改行:

--with-gnu-as --with-gnu-ld --enable-languages=c,c++

to 

--with-gnu-as --with-gnu-ld --enable-languages=c,c++,objc

12) 从 gcc 目录,下载并安装 gcc 补丁:

curl http://gcc.gnu.org/bugzilla/attachment.cgi?id=24879 > gcc.patch

cd gcc-4.6.1
patch -p1 < ../gcc-4.6.1.patch

13) 在 ndk 中找到这个文件:build/tools/build-mingw64-toolchain.sh。在此文件中,更改行:

var_append GCC_CONFIGURE_OPTIONS "--enable-languages=c,c++"
to
var_append GCC_CONFIGURE_OPTIONS "--enable-languages=c,c++,objc"

14) 接下来,在 ndk 中找到这个文件:build/tools/build-host-gcc.sh。在这里,换行:

ARGS=$ARGS" --enable-languages=c,c++"
to
ARGS=$ARGS" --enable-languages=c,c++,objc"

15) 进入 bash 终端(通过键入 bash),然后输入这些行(将 <...> 替换为实际路径:

LOC="<path to NDK folder>/android-ndk-r8b/build/tools/build-gcc.sh"
SRC="<path to NDK folder>/toolchain-src"
NDK="<path to NDK folder>/android-ndk-r8b"
TOOL="arm-linux-androideabi-4.6.1"

sh $LOC --gmp-version=4.2.4 --mpfr-version=2.4.1 --mpc-version=0.8.1 --binutils-version=2.23 --try-64  $SRC $NDK $TOOL

这开始工作,但失败并显示以下消息(在输出 config.log 文件中找到):

build-gcc.sh:1771: error: cannot find install-sh, install.sh, or shtool in "<path to NDK>/android-ndk-r8b/build/tools" "<path to NDK>/android-ndk-r8b/build/tools/.." "<path to NDK>/android-ndk-r8b/build/tools/../.."

查看 build-gcc.sh 文件,它的行数远少于 1771。进一步调查使我相信此错误发生在 /toolchain-src/gcc/gcc-4.6.1/configure 文件中,但我不知道要解决什么问题。

有谁知道我该如何解决这个问题?我不是在寻找外部链接或预构建的解决方案(例如 CrystaX 的自定义 ndk-r7),因为我已经阅读并尝试了很多。

【问题讨论】:

【参考方案1】:

奇怪的是,我不得不删除现有的 NDK 并重新取消归档。之后它起作用了。我最初安装 NDK 作为第一步,但它应该移到第 15 步之前。

【讨论】:

以上是关于使用支持 Objective-C 的 gcc 错误编译 Android NDK的主要内容,如果未能解决你的问题,请参考以下文章

objective-c与C++的区别

Objective-C 语法检查器

GCC_ENABLE_CPP_EXCEPTIONS 和 Objective-C

在 Mac OS X 上结合 Objective-C 和 C/C++

30分钟学会Objective-C

30分钟学会Objective-C