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

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