如何为Android NDK编译和使用Boost?我已经尝试了我在网上找到的所有内容,从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应用程序项目中使用它?
答案 0 :(得分:6)
我们设法为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 <your options>
toolset=gcc-arm
include=<ndk folder>\sources\cxx-stl\gnu-libstdc++\4.9\include
include=<ndk folder>\sources\cxx-stl\gnu-libstdc++\4.9\libs\<target platform>\include
include=<ndk folder>\platforms\<android api version>\arch-arm\usr\include
install --libdir=stage\lib\<target platform>
我们即将搬到ndkr10e。你能判断一下它是否仍适用于它吗? :)
答案 1 :(得分:2)
最简单的方法是使用CrystaX NDK,其中包含已构建且可立即使用的Boost库。以下是如何将Boost与CrystaX NDK一起使用的示例:1,2
答案 2 :(得分:1)
根据提升方向,我能够在Ubuntu 12.04上使用NDKr10e构建boost 1.60(尽管我怀疑很少取决于主机系统)。以下是我的笔记:
获取并解压缩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&#34;构建自定义二进制文件&#34;节
使用新的空根来安装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(?)到定义从独立工具链指向g ++的gcc版本(工具集)。请注意,这是一个使用NDK以正常方式创建的工具链,因为它创建了一个独立的工具链&#39;方向。我没有指向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构建共享库。我没有尝试这个。见:
答案 3 :(得分:0)
我只设法使用10d
进行构建。使用Boost for Android交叉编译Linux-&gt; Android就可以直接使用它。
要下载稍微过时的ndk,因为Boost for Android不立即支持所有ndk,您可以使用本指南:Where do I find old versions of Android NDK?
注意:我还想指定工具链。我不得不在两个地方做到这一点:
在build-android.sh中,就在上面提到的行之后:
TOOLCHAIN = $ {TOOLCHAIN:-arm-Linux的androideabi-4.9}
在命令行中
bash build-android.sh [ndk location] --toolchain = arm-linux-androideabi-4.9
事实上,当我使用--with-libraries=[comma separated list]
指定我想要的哪个增强组件时,它的效果更好。
如果相反我会建立一切,我会得到:
...未能更新38个目标...
...跳过了6个目标...
...更新了10568个目标...
错误:无法为Android构建增强功能!
完成!
答案 4 :(得分:0)
在这里:http://silverglint.com/boost-for-android/你可以找到一种简单而无痛的新方法,为Android构建一个现代(例如1.64.0)版本的boost。 适用于clang和gcc。
还包括一个示例应用程序,它向您展示如何使用这样构建的boost二进制文件。