在常用的库依赖中,例如opencv,glog等,由于这项目都是通过CMakeLists.txt 完成编译,只需要简单的指定NDK的编译器,使用如下的编译指令就可以完成项目的编译,生成所需要的库文件。
cd <project> mkdir build && cd build cmake \ -DCMAKE_TOOLCHAIN_FILE=$NDK/build/cmake/android.toolchain.cmake \ -DANDROID_ABI=arm64-v8a \ -DANDROID_NATIVE_API_LEVEL=android-23 \ -DANDROID_STL=c++_shared \ ..
|
但是,与上述项目不同,Boost使用的编译工具主要是自带的bootstrap.sh,需要的编译过程则会更加复杂,在这里以1.65.0版本的Boost为例,详细介绍一下如何在Ubuntu环境内交叉编译获得32位以及64位的Boost库文件。
首先,我们需要通过Boost官方页面下载指定版本的压缩包,这里需要注意的是,因为压缩包和Github上的Boost仓库并不一致,不要下载Boost仓库并切换分支。下载完成后我们将下载的压缩包解压并切换至解压文件夹。
之后我们需要产生编译Boost所需要的toolchain文件,我们需要指定好NDK的路径,确认该变量在系统中可用,指令echo $NDK可以正常运行。然后,我们使用下面脚本完成工具链的生成。
toolchain=$PWD/toolchain
$NDK/build/tools/make-standalone-toolchain.sh \ --arch=arm64 --platform=android-23 \ --install-dir="$toolchain" \ --toolchain=aarch64-linux-android-clang \ --use-llvm --stl=c++_shared
$NDK/build/tools/make-standalone-toolchain.sh \ --arch=arm --platform=android-23 \ --install-dir="$toolchain" \ --toolchain=armeabi-linux-android-clang \ --use-llvm --stl=c++_shared
|
第三步,我们需要生成编译所需要的user-config.jam文件,执行如下指令:
user_config=tools/build/src/user-config.jam rm -f $user_config
cat <<EOF > $user_config import os ;
using clang : android : "$toolchain/bin/clang++" : <archiver>$toolchain/bin/aarch64-linux-android-ar <ranlib>$toolchain/bin/aarch64-linux-android-ranlib ; EOF
cat <<EOF > $user_config import os ;
using clang : android : "$toolchain/bin/clang++" : <archiver>$toolchain/bin/arm-linux-androideabi-ar <ranlib>$toolchain/bin/arm-linux-androideabi-ranlib ; EOF
|
最后,执行常规的bootstrap.sh以及b2便可以编译生成库文件,在此过程中,我们可以指定编译库的安装路径。由于我们编译获得的是安卓上的库文件,强烈不建议安装到系统/usr/local路径下,我们可以直接编辑bootstrap.sh文件中的PREFIX变量为PWD/install。
./bootstrap.sh --with-toolset=clang
./b2 -j32 \ --with-atomic \ --with-chrono \ --with-container \ --with-date_time \ --with-exception \ --with-filesystem \ --with-iostreams \ --with-locale \ --with-log \ --with-program_options \ --with-random \ --with-regex \ --with-serialization \ --with-system \ --with-test \ --with-thread \ --with-timer \ --address-model=32 \ toolset=clang-android \ architecture=arm \ variant=release \ --layout=versioned \ target-os=android \ threading=multi \ threadapi=pthread \ link=shared \ runtime-link=shared \ install
|
最后我们可以在当前路径下的install文件夹内找到所有的库文件和头文件并在安卓工程中使用它们。