Android ndk 方式交叉编译boost库

文章介绍了如何在Linux环境下,利用NDK工具链对BoostC++库进行交叉编译,以生成适用于Android平台的SO库文件。过程中涉及到了设置环境变量、执行build-android.sh脚本以及自定义编译选项来选择特定版本和编译类型。此外,作者还分享了自己的尝试和失败的自定义编译脚本,供读者参考和讨论。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近公司项目重构,打算用统一的通讯库,控制器的原来的通讯使用的boost,所以打算在安卓这端通过jni的方式直接调用封装好的so类型的库;可能搞安卓的人很少遇到boost这个东西,一套c++的通讯库(当然不止通讯)这里附上官方链接boost;

原有的库的编译平台是linux,官方也提供了编译工具;在压缩包解压就能看到对应平台文件脚本;但是从linux(windows)编译安卓平台需要的so库文件需要使用交叉编译。相关资料十分有限,这里提供给大家我最后使用的方法;

linux平台下:

下载linux平台下的ndk工具,选择你想要的版本,我这里选用的是ndk21;下载链接下载链接

然后解压缩,配置linux的环境变量:

export   NDK=/home/atom/ndk65_21/android-ndk-r21e-linux-x86_64/android-ndk-r21e
export   PATH=${PATH}:$NDK

配置环境后,刷新或者重启一下,然后下载交叉编译工具boost for android

linux下执行build-android.sh脚本;

./build-android.sh $NDK//刚才设置的环境变量

这个工具在编译的时候会自动下载最新版本的boost库,默认编译成静态库;如果需要选择特定版本,在执行的时候配置参数:

./build-android.sh --boost=<version> $NDK//刚才设置的环境变量

如果需要编译成so动态库,打开脚本找到:link = static;static改成shared

编译完成后窗口会有提示,输出路径等信息;

除此之外还可以自己配置编译脚本,但是我操作这种方式失败了,把脚本贴到下边;欢迎各位讨论交流:

#!/bin/bash

if [ -z "$ANDROID_NDK_ROOT" ]; then
    echo "ANDROID_NDK_ROOT environment variable not set, exiting."
    exit 1
fi

if [ -z "$BOOST_ROOT" ]; then
    echo "BOOST_ROOT environment variable not set, exiting."
    exit 1
fi

ABI="arm64-v8a"
TOOLCHAIN="$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64"
SYSROOT="$TOOLCHAIN/sysroot"
TARGET="aarch64-none-linux-android"
API_LEVEL="21"

export PATH="$TOOLCHAIN/bin:$PATH"
export CC="$TARGET$API_LEVEL-clang"
export CXX="$TARGET$API_LEVEL-clang++"
export LD="$TARGET-ld"
export AR="$TARGET-ar"
export AS="$TARGET-as"
export RANLIB="$TARGET-ranlib"
export STRIP="$TARGET-strip"
export CPPFLAGS="--sysroot=$SYSROOT"
export CXXFLAGS="--sysroot=$SYSROOT"
export LDFLAGS="--sysroot=$SYSROOT"

cd $BOOST_ROOT
./bootstrap.sh
./b2 --build-dir=build/$ABI --stagedir=stage/$ABI --prefix=install/$ABI --toolset=clang --threading=multi --link=shared --runtime-link=shared  --target-os=android --without-python cxxflags="-fPIC $CXXFLAGS" 
    linkflags="-llog -fPIC $LDFLAGS" install

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值