首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >编译并使用boost for Android NDK R10e

编译并使用boost for Android NDK R10e
EN

Stack Overflow用户
提问于 2015-05-28 03:10:58
回答 4查看 12.7K关注 0票数 18

如何编译和使用Boost for the Android NDK?我已经尝试了我在网上找到的所有东西,从Boost for Android到自己用bjam文件编译它。然而,我并没有成功。当我尝试用bjam编译它时,我得到了以下错误:

代码语言:javascript
复制
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

有没有人成功地将Boost与Android NDK R10e一起使用?

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-05-28 15:17:42

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

代码语言:javascript
复制
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编译,告诉安卓的路径包括:

代码语言:javascript
复制
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。你能告诉我boost是否还能用吗?:)

票数 6
EN

Stack Overflow用户

发布于 2015-05-28 04:17:14

最简单的方法是使用CrystaX NDK,它包含已经构建的、随时可用的Boost库。下面是如何在CrystaX NDK中使用Boost的示例:12

票数 2
EN

Stack Overflow用户

发布于 2016-03-11 01:10:36

按照boost的指导,我能够在Ubuntu12.04上用NDKr10e构建Boost1.60(尽管我怀疑这很少依赖于主机系统)。以下是我的笔记:

获取并解压缩boost源代码tarball (我使用的是1.60):boost_1_60_0.tar.bz2

代码语言:javascript
复制
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上入门“构建自定义二进制文件”部分中的boost说明进行操作

使用全新的空根目录安装b2,即/scratch/ boost -build- root;使用usr作为前缀;再次遵循boost说明:

代码语言:javascript
复制
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放入path (同样按照说明)

代码语言:javascript
复制
export PATH=/scratch/moskewcz/android/boost-build-root/usr/bin:$PATH

在某些jam文件中(我没有~/user-config.jam,所以我创建了一个并使用它,也许有更好的选择来创建/编辑jam文件)添加一些jam-code (?)定义一个从独立工具链指向g++的gcc版本(工具集)。请注意,这是一个使用NDK以正常方式创建的工具链,遵循其“创建独立工具链”的说明。我不是指向NDK本身的g++ (我不知道这可能会工作,也可能不会工作):

代码语言:javascript
复制
import option ; 
using gcc : arm_linux_android_4.9 : /scratch/android-stc/bin/aarch64-linux-android-g++ ; 
option.set keep-going : false ;

转到boost项目根目录并构建,主要是按照说明。--build-dir可能是可选的?我还添加了-j8来||生成

代码语言:javascript
复制
moskewcz@maaya:/scratch/moskewcz/android/src/boost_1_60_0$ b2 -j8 --build-dir=bin.v2 toolset=gcc-arm_linux_android_4.9 stage

注意,这试图在默认情况下构建静态库和共享库,但是构建共享库失败了,因为安卓没有librt.so --根据我的研究,人们声称在安卓下(一些?)librt.so的功能是在libc.so内部的--所以为了构建安卓共享库,简单地从链接步骤中删除-lrt可能是可以的。我并没有尝试这样做。请参见:

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

Building Boost for Android with error "cannot find -lrt"

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30491158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档