linxu NDK编译protobuf方法 各种NDK版本的编译方法

  • 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 更高版本

https://blog.csdn.net/qq_28386947/article/details/105745808

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章