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