使用支持 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的主要内容,如果未能解决你的问题,请参考以下文章
GCC_ENABLE_CPP_EXCEPTIONS 和 Objective-C