Android提供的NDK工具链是基于GCC 4.4.3的,很多最新的GCC的优化特性无法使用,于是尝试自己编译一个。下面描述下具体过程。 获取需要的文件按照下面的列表下载相同版本的源码,只要到它们的官方网站就可以找到
当然可以选择尝试不同的版本组合,但可能会有各种错误,浪费宝贵的时间,比如下面这个错误我就困扰了很久 /bin/sed: can't read =/tmp/ndk-abitno/build/toolchain/temp-install/lib/libgmp.la: No such file or directory 组织源码目录首先解压NDKr7,假定解压的NDK根目录为$NDK,然后其他软件源码的组织如下
同时需要把一份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 然后对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) |