编译Android armeabi-v7a 和 arm64-v8a的protobuf.a 库

一、环境要求

  1. ubuntu18.0.4

二、工具准备

1. 必要工具
sudo apt install autoconf automake libtool curl make g++ unzip

2. 下载NDK

使用wget命令下载NDK压缩包

wget "https://dl.google.com/android/repository/android-ndk-r19c-linux-x86_64.zip"

3. 解压NDK
unzip android-ndk-r19c-linux-x86_64.zip

解压期间会提示 replace android-ndk-r19c/sysroot/usr/include/linux/netfilter/xt_DSCP.h? 输入 A ,然后按回车即可

4. 生成 clang32 和clang64
cd android-ndk-r19c

toolchain_dir=`pwd`/..	#设置clang 的生成路径为上级目录

#clang32 的生成
./build/tools/make-standalone-toolchain.sh \
--arch=arm --platform=android-21 \
--toolchain=arm-linux-android-clang5.0 \
--install-dir=$toolchain_dir/arm-21-toolchain-clang-32 \
--use-llvm \
--stl=libc++

#clang64的生成
./build/tools/make-standalone-toolchain.sh \
--arch=arm64 \
--platform=android-21 \
--toolchain=arm-linux-android-clang5.0 \
--install-dir=$toolchain_dir/arm-21-toolchain-clang-64 \
--use-llvm \
--stl=libc++

cd ../ #返回上级目录

此时 目录下有以下文件夹
在这里插入图片描述

三、下载与编译

1. 下载protobuf

这里我们使用git 下载protobuf 与其插件

git clone https://github.com/protocolbuffers/protobuf.git 
cd protobuf
git submodule update --init --recursive

2. 编译
  1. 建立脚本文件 build_armeabi_v7a.sh

make distclean
./autogen.sh

export build_dir=`pwd`/libprotobuf/android
export sysroot=`pwd`/../arm-21-toolchain-clang-32/sysroot   ##前面ndk生成的clang-32路径
export PATH=`pwd`/../arm-21-toolchain-clang-32/bin:$PATH
export CC="arm-linux-androideabi-clang --sysroot $sysroot"
export CXX="arm-linux-androideabi-clang++ --sysroot $sysroot"

mkdir -p $build_dir/armeabi-v7a

./configure \
--host=arm-linux-androideabi \
--with-protoc=protoc \
--with-sysroot="$sysroot" \
--disable-shared \
--prefix="$build_dir/armeabi-v7a" \
--exec-prefix=$build_dir/armeabi-v7a \
--enable-cross-compile \
CFLAGS="-march=armv7-a -D__ANDROID_API__=21" \  #这里不要更改Android 版本
CXXFLAGS="-frtti -fexceptions -march=armv7-a -D__ANDROID_API__=21" \
LIBS="-llog -lz -lc++_static"

make -j12
make install
  1. 建立脚本文件 build_arm64_v8a.sh
#!/bin/bash

make distclean
./autogen.sh

export build_dir=`pwd`/libprotobuf/android
export sysroot=`pwd`/../arm-21-toolchain-clang-64/sysroot      ##前面ndk生成的clang-64路径
export PATH=`pwd`/../arm-21-toolchain-clang-64/bin:$PATH
export CC="aarch64-linux-android-clang --sysroot $sysroot"
export CXX="aarch64-linux-android-clang++ --sysroot $sysroot"

mkdir -p $build_dir/arm64-v8a

./configure \
--host=arm-linux-androideabi \
--with-protoc=protoc \
--with-sysroot="$sysroot" \
--disable-shared \
--prefix="$build_dir/arm64-v8a" \
--exec-prefix="$build_dir/arm64-v8a" \
--enable-cross-compile \
CFLAGS="-march=armv8-a -D__ANDROID_API__=21" \		#这里不要更改Android 版本
CXXFLAGS="-frtti -fexceptions -march=armv8-a -D__ANDROID_API__=21" \
LIBS="-llog -lz -lc++_static"

make -j12
make install
  1. 执行自动编译脚本
sudo ./build_armeabi_v7a.sh
sudo ./build_arm64_v8a.sh

等待编译完成,此时进入libprotobuf/android文件夹下有两个文件夹
](https://img-blog.csdnimg.cn/c21e28cf41734e1fa728e3d5713bbbd8.png)


这就是最终的protobuf的库文件,可以将这两个文件夹拷贝进项目中接入使用

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值