织梦CMS - 轻松建站从此开始!

罗索实验室

当前位置: 主页 > 嵌入式开发 > Android >

编译自己的Android NDK工具链

落鹤生 发布于 2012-06-07 21:30 点击:次 
Android提供的NDK工具链是基于GCC 4.4.3的,很多最新的GCC的优化特性无法使用,于是尝试自己编译一个。下面描述下具体过程。
TAG:

Android提供的NDK工具链是基于GCC 4.4.3的,很多最新的GCC的优化特性无法使用,于是尝试自己编译一个。下面描述下具体过程。

获取需要的文件

按照下面的列表下载相同版本的源码,只要到它们的官方网站就可以找到

  • NDKr7
  • binutils 2.21.1
  • GCC 4.6.2
  • GDB 7.3.1
  • GMP 5.0.2
  • MPC 0.9
  • MPFR 3.0.1

当然可以选择尝试不同的版本组合,但可能会有各种错误,浪费宝贵的时间,比如下面这个错误我就困扰了很久

    /bin/sed: can't read =/tmp/ndk-abitno/build/toolchain/temp-install/lib/libgmp.la: No such file or directory
    libtool: link: `=/tmp/ndk-abitno/build/toolchain/temp-install/lib/libgmp.la' is not a valid libtool

组织源码目录

首先解压NDKr7,假定解压的NDK根目录为$NDK,然后其他软件源码的组织如下

  • $NDK/src/binutils/binutils-2.21.1/
  • $NDK/src/gcc/gcc-4.6.2/
  • $NDK/src/gdb/gdb-7.3.1/
  • $NDK/src/gmp/gmp-5.0.2.tar.bz2
  • $NDK/src/mpc/mpc-0.9.tar.gz
  • $NDK/src/mpfr/mpfr-3.0.1.tar.bz2

同时需要把一份build脚本代码放到$NDK/src/

git clone https://android.googlesource.com/toolchain/build.git $NDK/src/build

patch一部分代码

对$NDK/build/tools/build-gcc.sh做如下修改

MPFR_VERSION=$DEFAULT_MPFR_VERSION
register_var_option "--mpfr-version=<version>" MPFR_VERSION "Specify mpfr version"

MPC_VERSION=0.9
register_var_option "--mpc-version=<version>" MPC_VERSION "Specify mpc version"

                        --with-gcc-version=$GCC_VERSION \
                        --with-gdb-version=$GDB_VERSION \
                        --with-mpc-version=$MPC_VERSION \
                        --with-pic \
                        $ABI_CONFIGURE_EXTRA_FLAGS

然后对GCC打上两个补丁,一个从这个链接获取。另外一个是用来解决链接部分C++代码时出现的如下错误的

undefined reference to `__dso_handle'

补丁位于$NDK/build/tools/toolchain-patches/gcc/0005-Use-the-correct-CRT-files-with-shared-link-option.patch

开始编译

准备工作完成之后,编译就很顺畅了,不过要保证/tmp目录至少有2G的空间,如果没有,最好修改一下编译脚本中的路径。

$NDK/build/tools/build-gcc.sh --try-64  --gmp-version=5.0.2 --mpfr-version=3.0.1 --mpc-version=0.9 --binutils-version=2.21.1 --gdb-version=7.3.1 $(pwd)/src $(pwd) arm-linux-androideabi-4.6.2

编译完成后,$NDK/toolchains目录下会多出一个arm-linux-androideabi-4.6.2,然后把arm-linux-androideabi-4.4.3目录下的config.mk和setup.mk文件copy一份即可。

使用新的工具链

在你的NDK项目里,使用如下命令启用新的工具链

NDK_TOOLCHAIN=arm-linux-androideabi-4.6.2 ndk-build -j4

使用新的工具链的最终效果并没有很显著的性能提升,不过对于理解一些Android编译的相关过程还是挺有帮助的

(abitno)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www1.rosoo.net/a/201206/16073.html]
本文出处:abitno.me 作者:abitno 原文
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容