protobuf/android 交叉編譯筆記

protobuf 交叉編譯筆記

目標是使用 android ndk 的工具鏈編譯出 android armeabi-v7a 可用的 protobuf 庫。android

交叉編譯環境配置

windows 平臺

  1. 下載 NDK x86_64 或者 NDK x86 並解壓縮
  2. 下載 protobuf 源代碼。這裏以 protobuf 3.4.1 舉例。
  3. 下載並安裝最新的 cmake 3.10 x86_64 或者 cmake 3.10 x86

以上,準備完成。git

使用 cmake 生成 makefile

選擇一個你喜歡的位置,打開cmd,執行下述命令。github

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

幾個關鍵參數略做解釋。windows

CMAKE_TOOLCHAIN_FILE,這個變量指定了 cmake 使用的 toolchain 腳本,toolchain腳本會幫助配置交叉編譯使用的頭文件/庫文件路徑,配置編譯器/連接器等一系列工具。bash

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,即通常所說的 Makefileui

編譯

cmake --build . --target libprotobuf
cmake --build . --target libprotobuf-lite

分別編譯libprotobuflibprotobuf-lite兩個庫,這兩個庫就是咱們將會用到的 protobuf 靜態庫了。google

相關文章
相關標籤/搜索