按照 boost 的指示,我能够在 Ubuntu 12.04 上使用 NDKr10e 构建 boost 1.60(尽管我怀疑很少依赖于主机系统)。这是我的笔记:
获取并解压 boost 源压缩包(我使用的是 1.60):boost_1_60_0.tar.bz2
moskewcz@maaya:/scratch/moskewcz/android/src$ ll
total 74M
drwx------ 10 moskewcz moskewcz 4.0K Mar 9 14:14 boost_1_60_0
-rw-rw-r-- 1 moskewcz moskewcz 74M Jan 5 11:15 boost_1_60_0.tar.bz2
按照 boost 说明开始使用 unix“构建自定义二进制文件”部分
使用新的空根安装 b2,即 /scratch/boost-build-root;使用 usr 作为前缀;再次按照提升说明进行操作:
moskewcz@maaya:/scratch/moskewcz/android/src/boost_1_60_0/tools/build$ ./bootstrap.sh
moskewcz@maaya:/scratch/moskewcz/android/src/boost_1_60_0/tools/build$ ./b2 install --prefix=/scratch/moskewcz/android/boost-build-root/usr
将 b2 放入路径中(再次按照说明)
export PATH=/scratch/moskewcz/android/boost-build-root/usr/bin:$PATH
在一些 jamfile 中(我没有 ~/user-config.jam,所以我创建了一个并使用了它,也许有更好的 jamfile 选择来创建/编辑)添加一些 jam-code (?) 来定义 gcc版本(工具集)指向独立工具链中的 g++。请注意,这是一个使用 NDK 以正常方式创建的工具链,遵循其“创建独立工具链”的指示。我不是指向 NDK 本身内部的 g++(我不知道,它可能有效,也可能无效):
import option ;
using gcc : arm_linux_android_4.9 : /scratch/android-stc/bin/aarch64-linux-android-g++ ;
option.set keep-going : false ;
去提升项目根目录和构建,主要是按照指示。 --build-dir 可能是可选的?还加了-j8来做||构建
moskewcz@maaya:/scratch/moskewcz/android/src/boost_1_60_0$ b2 -j8 --build-dir=bin.v2 toolset=gcc-arm_linux_android_4.9 stage
请注意,默认情况下,这会尝试构建静态库和共享库,但是由于 android 没有 librt.so,因此构建共享库失败 - 根据我的研究,人们声称在 android 下(一些?) librt.so 在 libc.so 中——因此可以简单地从链接步骤中删除 -lrt 以便为 android 构建共享库。我没有尝试这个。见:
https://code.google.com/p/android/issues/detail?id=5730
Building Boost for Android with error "cannot find -lrt"