8

我正在尝试在带有 Windows 的 Eclipse 中使用带有 Android ndk 的 boost 库。我试着按照这个教程

我被 cygwin 中的“bjam”命令卡住了。

bjam --without-python --without-serialization 工具集=gcc-android4.4.3 link=static runtime-link=static target-os=linux --stagedir=android

错误:找不到 bjam 命令。

什么是bjam?我也沿 ndk r8e 使用了 boost 1.53。有人可以帮我吗?

4

1 回答 1

18

Android NDK 不再依赖于 Cygwin,因此您可以在 Windows 命令提示符 ( cmd) 中使用 NDK 构建 Boost。

为了Boost.Build找到 NDK,编辑boost\tools\build\v2\user-config.jam文件并附加以下文本:

import os ;

androidNDKRoot = C:/android-ndk-r8e ; # put the relevant path
 using gcc : android :
     $(androidNDKRoot)/toolchains/arm-linux-androideabi-4.7/prebuilt/windows/bin/arm-linux-androideabi-g++ :
     <compileflags>--sysroot=$(androidNDKRoot)/platforms/android-9/arch-arm
     <compileflags>-mthumb
     <compileflags>-Os
     <compileflags>-fno-strict-aliasing
     <compileflags>-O2
     <compileflags>-DNDEBUG
     <compileflags>-g
     <compileflags>-lstdc++
     <compileflags>-I$(androidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.7/include
     <compileflags>-I$(androidNDKRoot)/sources/cxx-stl/gnu-libstdc++/4.7/libs/armeabi/include
     <compileflags>-D__GLIBC__
     <compileflags>-D_GLIBCXX__PTHREADS
     <compileflags>-D__arm__
     <compileflags>-D_REENTRANT
     <archiver>$(androidNDKRoot)/toolchains/arm-linux-androideabi-4.7/prebuilt/windows/bin/arm-linux-androideabi-ar
     <ranlib>$(androidNDKRoot)/toolchains/arm-linux-androideabi-4.7/prebuilt/windows/bin/arm-linux-androideabi-ranlib
         ;

当然,c:/android-ndk-r8e您不必将 NDK 的正确位置放在您的 PC 上。

此外,您可以选择更新的平台 API,而不是android-9.

另请注意,NDK 提供了几个工具链,并且上述设置指向 gcc-4.7。如果您更喜欢使用其他工具链构建 boost,请更改arm-linux-androideabi-4.7为相关路径。

将配置放入 user-config.jam 后,打开cmdBoostcd所在目录,然后调用bootstrap. 然后像这样调用b2(例如):

b2 --without-python --without-serialization threading=multi link=static runtime-link=static toolset=gcc-android target-os=linux threadapi=pthread --stagedir=android stage

更新:截至 11/2015,较旧的 NDK 工具链似乎与较新的 Boost 版本存在问题,导致编译器崩溃,因此请考虑使用更新的编译器。为此,只需将上述脚本中每出现一次 4.7 更改为 4.9。此外,值得使用更新的 Android API 进行编译(例如,andoroid-9 -> andoroid-16 左右)。

于 2013-07-16T09:00:16.300 回答