Android之protobuf lib库

ndk

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

arm-21-toolchain-clang-32 & arm-21-toolchain-clang-64准备

protobuf config的时候需要这两个库,用来编译成armeabi-v7a和arm64-v8a的

unzip
cd android-ndk-r16b
toolchain_dir=`pwd`/..  //设置生成路径(当前路径的上级目录)

clang-32

./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++

clang-64

./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++

此时就会在刚刚设的路径下生成,如下:
dir

protobuf source Code

git clone https://github.com/protocolbuffers/protobuf.git
git checkout v3.10.1
git submodule update --init --recursive

check

./autogen.sh
生成目录
mkdir -p `pwd`/../libprotobuf/android    //建立生成目录
build armeabi-v7a

建立脚本build_32.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"

./configure \
--host=arm-linux-androideabi \
--with-protoc=protoc \
--with-sysroot="$sysroot" \
--disable-shared \
--prefix="$build_dir/armeabi-v7a" \
--enable-cross-compile \
CFLAGS="-march=armv7-a -D__ANDROID_API__=21" \
CXXFLAGS="-frtti -fexceptions -march=armv7-a -D__ANDROID_API__=21" \
LIBS="-llog -lz -lc++_static"

make -j12
make install

执行

bash build_32.sh

此时armeabi-v7a就会在你指定的输出文件夹下生成

build arm64-v8a

同上build_64.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"

./configure \
--host=arm-linux-androideabi \
--with-protoc=protoc \
--with-sysroot="$sysroot" \
--disable-shared \
--prefix="$build_dir/arm64-v8a" \
--enable-cross-compile \
CFLAGS="-march=armv8-a -D__ANDROID_API__=21" \
CXXFLAGS="-frtti -fexceptions -march=armv8-a -D__ANDROID_API__=21" \
LIBS="-llog -lz -lc++_static"

make -j12
make install

执行

bash build_64.sh

整理:

mkdir -p ../libprotobuf/android/lib/armeabi-v7a
mkdir -p ../libprotobuf/android/lib/arm64-v8a
cp ../libprotobuf/android/armeabi-v7a/lib/libprotobuf-lite.a ../libprotobuf/android/lib/armeabi-v7a
cp ../libprotobuf/android/arm64-v8a/lib/libprotobuf-lite.a ../libprotobuf/android/lib/arm64-v8a
cp -r ../libprotobuf/android/armeabi-v7a/include ../libprotobuf/android/include
rm -rf ../libprotobuf/android/armeabi-v7a
rm -rf ../libprotobuf/android/arm64-v8a

最后:
tree

最最后,打包好的LIb库

猜你喜欢

转载自blog.csdn.net/qq_33717425/article/details/105642331
今日推荐