NDKr16b編譯protobuf 3.5.1 方法
獨立工具鏈編譯方法,請看 https://blog.csdn.net/qq_28386947/article/details/105745620
上次我們說到ndkr16b編譯protobuf3.5.1以上版本會報以下錯:
undefined reference to 'scc_info_FileDescriptorProto_google_2fprotobuf_2fdescriptor_2eproto
那如何解決呢。這次我們用cmake的方法交叉編譯protbuf3.8.0或任何版本。
目前NDK的最高版本不支持獨立工具鏈,但都會支持cmake編譯,以下是編譯方法。
1、NDK編譯protobuf 3.8.0
編譯Android版protobuf前,先確保已經編譯安裝好linux版protobuf
cd ~/Android
git clone https://github.com/protocolbuffers/protobuf.git
cd protobuf
git checkout v3.8.0
cd cmake
輸入以下參數:
cmake -DCMAKE_TOOLCHAIN_FILE=/home/aicrobo/Documents/android-ndk-r16b/build/cmake/android.toolchain.cmake -DANDROID_ABI=armeabi-v7a \
-DANDROID_NATIVE_API_LEVEL=21 \
-DCMAKE_BUILD_TYPE=Release\
-DANDROID_TOOLCHAIN=clang -Dprotobuf_BUILD_TESTS=OFF \
-Dprotobuf_BUILD_SHARED_LIBS=ON
編譯生成.so文件在protobuf cmake中。
說一下ndk的重要參數吧:
DANDROID_NATIVE_API_LEVEL 是你ndk API 的多
Dprotobuf_BUILD_SHARED_LIBS ON表示動態庫 生成.so文件。
2、編譯linux版本protobuf 必須!!在使用ndk之前 ,必須有linux版本的protobuf
//創建protobuf的目錄
//git clone protobuf
mkdir $HOME/Android/NDK/google
cd $HOME/Android/NDK/google
git clone https://github.com/protocolbuffers/protobuf.git
cd protobuf
git submodule update --init --recursive
#檢查你的proto版本號 別看錯了
git checkout -b v3.5.2 v3.5.2
構建 (x86) 版本protobuf 庫和構建器(protoc)
sudo apt-get install curl autoconf libtool build-essential g++
#在proto根目錄
./autogen.sh
mkdir x86_build
cd x86_build
../configure --prefix=$HOME/Android/NDK/google/x86_pb_install
make install –j8
cd ..
庫文件在: $HOME/Android/NDK/google/x86_pb_install/lib
protoc 文件在: $HOME/Android/NDK/google/x86_pb_install/bin
包含的頭文件在: $HOME/Android/NDK/google/x86_pb_install/include