为Android NDK R10e编译和使用boost

如何为Android NDK编译和使用Boost? 我已经尝试过我在网上find的所有内容,从Boost for Android到使用bjam文件自行编译。 但是,我没有成功。 当我尝试使用bjam编译它时,我收到以下错误:

error: toolset gcc initialization: error: version 'androidR10e' requested but 'g++-androidR10e' not found and version '4.2.1' of default 'g++' does not match error: initialized from /path/to/android-ndk-r10e/sources/boost/tools/build/v2/user-config.jam:86 

有没有人成功使用过Android NDK R10e的Boost?

当我可以编译它时,我该如何在我的Android应用程序项目中使用它?

我们设法为NDKr10d编译它。 对于NDKr10e应该是相同的。 project-config.bjam应该指向NDK的gcc编译器。 我们看起来像这样:

 import option ; using gcc : arm : D:\\android\\ndk\\toolchains\\arm-linux-androideabi-4.9\\prebuilt\\windows-x86_64\\bin\\arm-linux-androideabi-g++.exe ; option.set keep-going : false ; 

然后用b2编译,告诉android包含的路径:

 b2 --reconfigure  toolset=gcc-arm include=\sources\cxx-stl\gnu-libstdc++\4.9\include include=\sources\cxx-stl\gnu-libstdc++\4.9\libs\\include include=\platforms\\arch-arm\usr\include install --libdir=stage\lib\ 

我们即将转向ndkr10e。 你能说出升力是否还能用吗? 🙂

最简单的方法是使用CrystaX NDK ,它包含已经构建的和即用型Boost库。 以下是如何将Boost与CrystaX NDK一起使用的示例: 1,2

按照提升方向,我能够在Ubuntu 12.04上使用NDKr10e构建boost 1.60(尽管我怀疑很少取决于主机系统)。 这是我的笔记:

get和unpack boost source tarball(我使用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 

在开始使用unix“构建自定义二进制文件”部分时,请按照提示说明操作

使用一个新的空根来安装b2 ie / 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的function在libc.so里面 – 所以可以简单地从链接步骤中删除-lrt以便为android构建共享库。 我没有尝试这个。 看到:

https://code.google.com/p/android/issues/detail?id=5730

为Android构建Boost,错误“找不到-lrt”

我只设法用10d构建。 使用Boost for Android交叉编译Linux-> Android可以直接使用它。

要下载稍微过时的ndk,因为Boost for Android不会立即支持所有ndk,您可以使用本指南: 我在哪里可以find旧版本的Android NDK?

注意:我还想指定工具链。 我不得不在两个地方做:

  1. 在build-android.sh中,就在上面提到的行之后:

    TOOLCHAIN = $ {TOOLCHAIN:-arm-Linux的androideabi-4.9}

  2. 在命令行中

    bash build-android.sh [ndk location] –toolchain = arm-linux-androideabi-4.9

实际上,当我使用--with-libraries=[comma separated list]确切指定了我想要的哪个增强组件时,它工作得更好。

如果相反我会建立一切,我会得到:

…未能更新38个目标……

…跳过了6个目标……

…更新了10568个目标……

错误:无法为Android构建增强function!

完成!

在这里: http ://silverglint.com/boost-for-android/你可以find一个简单而无痛的新方法来构建一个现代(例如1.64.0)版本的boost for android。 与clang和gcc一起使用。

还包括一个示例应用程序,它向您展示如何使用这样构建的boost二进制文件。