protobuf 交叉編譯筆記 目標是使用 android ndk 的工具鏈編譯出 android armeabi v7a 可用的 protobuf 庫。 交叉編譯環境配置 windows 平臺 1. 下載 "NDK x86_64" 或者 "NDK x86" 並解壓縮 2. 下載 "protobuf ...
protobuf 交叉編譯筆記
目標是使用 android ndk 的工具鏈編譯出 android armeabi-v7a 可用的 protobuf 庫。
交叉編譯環境配置
windows 平臺
- 下載 NDK x86_64 或者 NDK x86 並解壓縮
- 下載 protobuf 源代碼。這裡以 protobuf 3.4.1 舉例。
- 下載並安裝最新的 cmake 3.10 x86_64 或者 cmake 3.10 x86。
以上,準備完成。
使用 cmake 生成 makefile
選擇一個你喜歡的位置,打開cmd
,執行下述命令。
mkdir build
cd build
cmake -G "MinGW Makefiles" \
-DCMAKE_TOOLCHAIN_FILE=<Your NDK PATH>/build/cmake/android.toolchain.cmake \
-DCMAKE_MAKE_PROGRAM=<Your NDK PATH>/prebuilt/windows-x86_64/bin/make.exe \
-Dprotobuf_BUILD_TESTS=OFF \
<Protobuf source PATH>/cmake
幾個關鍵參數略作解釋。
CMAKE_TOOLCHAIN_FILE
,這個變數指定了 cmake 使用的 toolchain 腳本,toolchain腳本會幫助配置交叉編譯使用的頭文件/庫文件路徑,配置編譯器/鏈接器等一系列工具。
CMAKE_MAKE_PROGRAM
,這個變數指定了cmake使用的make程式,如果系統的PATH
中沒有 make.exe
的話(通常也不會有,除非安裝了 MinGW 並且配置了 PATH
環境變數),就需要指定使用的 make.exe
程式。這裡使用了 ndk 自帶的 prebuilt 版 make.exe
。
protobuf_BUILD_TESTS
,不要編譯測試用例,這一選項預設啟用,但在交叉編譯時會導致奇怪的問題。
-G "MinGW Makefiles"
,指定 cmake 生成 MinGW Makefile
,即一般所說的 Makefile
。
編譯
cmake --build . --target libprotobuf
cmake --build . --target libprotobuf-lite
分別編譯libprotobuf
和libprotobuf-lite
兩個庫,這兩個庫就是我們將會用到的 protobuf
靜態庫了。