-
NDKr16b编译protobuf 3.5.1 方法
注意:如果protobuf 3.5.1 以上更高版本 ,请看 https://blog.csdn.net/qq_28386947/article/details/105745808
目前可能会遇到的问题:首先,NDKr16b只支持独立工具链,所以我们用独立工具链编译protobuf 3.5.1。
注意:protobuf版本超过3.5.1会报以下错:
undefined reference to 'scc_info_FileDescriptorProto_google_2fprotobuf_2fdescriptor_2eproto
1、编译环境搭建
将NDK下载解压至~/Android/android-ndk-r16b //你自己设置的目录
参考Android Standalone Toolchains构建Android独立工具链,如下
~/Android/android-ndk-r16b/build/tools/make-standalone-toolchain.sh \
--arch=arm \
--platform=android-26 \
--toolchain=arm-linux-android-clang5.0 \
--install-dir=$HOME/Android/arm-26-toolchain-clang \
--use-llvm \
--stl=libc++
编译protobuf
编译Android版protobuf前,先确保已经编译安装好linux版protobuf
cd ~/Android
git clone https://github.com/protocolbuffers/protobuf.git
cd protobuf
git checkout v3.5.1
./autogen.sh
mkdir build && cd build
vi build-protobuf-android.sh
build-protobuf-android.sh 内容
export PREFIX=$HOME/Android/andrc/protobuf-3.5.1-v7a/
export PATH=$HOME/Android/arm-26-toolchain-clang/bin:$PATH
export SYSROOT=$HOME/Android/arm-26-toolchain-clang/sysroot
export CC="arm-linux-androideabi-clang --sysroot $SYSROOT"
export CXX="arm-linux-androideabi-clang++ --sysroot $SYSROOT"
../configure \
--prefix=$PREFIX \
--host=arm-linux-androideabi \
--with-sysroot="${SYSROOT}" \
--enable-shared \
--enable-cross-compile \
--with-protoc=protoc \
CFLAGS="-march=armv7-a -D__ANDROID_API__=26" \
CXXFLAGS="-frtti -fexceptions -march=armv7-a -D__ANDROID_API__=26" \
LIBS="-llog -lz -lc++_static"
make -j 2
make install
执行脚本编译bash build-protobuf-android.sh
编译好后的文件在~/Android/protobuf-3.5.1/目录
好 ,目前这个版本的编译成功。那如果编译更高的版本如何解决呢。请看下一篇:NDK20编译protpbuf 更高版本