Protobuf C++ ARM 版編譯安裝
前言
Protobuf C++ ARM 版依賴於linux版本,需要使用交叉編譯環境進行編譯,這裏使用的是 arm-none-linux-gnueabi-c++
arm-none-linux-gnueabi-c++下載地址
安裝交叉編譯環境
- 下載arm-none-linux-gnueabi-c++
- 將其移動到linux目錄下
- 解壓
tar -jxvf arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
- 修改環境變量
vim /etc/profile
添加解壓後文件所在路徑(… 代表路徑,替換爲自己的)
export PATH=$PATH:.../arm/bin
- 保存執行
source /etc/profile
驗證
arm-none-linux-gnueabi-c++ -v
如果返回如下圖所示,則成功
可能存在問題
arm-none-linux-gnueabi-c++ -v
提示找不到路徑之類的錯誤,可能是有與32位和64位造成
需要安裝兼容庫
sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0
安裝protobuf linux版本
安裝protobuf arm版本
安裝protobuf arm版本需要先安裝linux版本,用到其中的生成文件
生成Makefile文件
./configure --host=arm-linux --prefix=/usr/local/protobuf_arm --with-protoc=/usr/local/protobuf/bin/protoc CC=arm-none-linux-gnueabi-gcc CXX=arm-none-linux-gnueabi-g++
--host
編譯的版本爲arm-linux--prefix
爲生成文件的路徑--with-protoc
爲linux版protoc的路徑,即之前安裝的linux版本生成的目錄中的工具CC
指定編譯c的工具鏈爲arm-none-linux-gnueabi-gcc
CXX
指定編譯c的工具鏈爲arm-none-linux-gnueabi-g++
這一步主要目的是用來生成Makefile文件
編譯安裝
編譯:make
測試: make check
安裝 : make install
設置環境變量
添加如下環境變量
vim /etc/profile
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/protobuf_arm/lib
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/protobuf_arm/lib
export PATH=$PATH:/usr/local/protobuf_arm/bin
保存執行
source /etc/profile
編譯Demo
arm-none-linux-gnueabi-c++ -std=c++11 Test.pb.cc test.cpp -o test `pkg-config --cflags --libs protobuf-lite`
上述鏈接的protobuf-lite庫,有些高級用法進行了刪減,主要是減小鏈接庫煩人體積,對應的.proto
文件添加option optimize_for = LITE_RUNTIME;
也可以採用protobuf庫,包含完整用法,不需要加option optimize_for
選項
使用生成的文件
在liunx已無法直接運行,需要移動到ARM端執行
在執行前需要先將依賴的庫推入ARM設備
adb shell mount -o rw,remount /
adb push protobuf-lite.so.20 /usr/lib/protobuf-lite.so.20
我這裏根據錯誤提示推入的是protobuf-lite.so.20
然後即可執行
./tets
歡迎關注我的公衆號,持續分析優質技術文章