为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应用程序项目中使用它?

  • Android ndk:从j ++调用Java方法的问题
  • 触摸屏手势列表和名称
  • xamarin中的“布局渲染器失败”错误
  • C#.NET中的MP3stream媒体4.5.1在三星6S上的MVC 5.2.2
  • Android NDK STL c ++ _ shared w / LIBCXX_FORCE_REBUILD导致std :: stringstream NOP
  • 在Android.mk中使用Make的'通配符'function
  • 在Android中从Java调用C ++库
  • 何时在Android NDK中使用JNIEXPORT和JNICALL?
  • 我们设法为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二进制文件。