一、PC上安裝protobuf和protobuf-c
1. 安裝protobuf
protocolbuffers 倉庫地址 :https://github.com/protocolbuffers/protobuf
本文選擇下載 v21.12版本(太新版本 protobuf-c可能不支援)
$ cd protobuf-21.12 $ ./autogen.sh $ ./configure #預設安裝路徑/usr/local/ $ make $ sudo make install
2. 安裝protobuf-c
倉庫地址:https://github.com/protobuf-c/protobuf-c
$ git clone https://github.com/protobuf-c/protobuf-c.git $ cd protobuf-c $ ./autogen.sh $ ./configure $ make $ sudo make install
$ sudo ldconfig
會生成 /usr/local/bin/protoc-c 和 /usr/local/bin/protoc-gen-c ,用於根據.proto 生成 c 原始碼。
二、交叉編譯protobuf-c庫
#重新進入 protobuf-c 目錄 $ make clean #清除之前的配置 $ ./configure --host=arm-none-linux-gnueabihf CC=arm-none-linux-gnueabihf-gcc CXX=arm-none-linux-gnueabihf-g++ --disable-protoc --prefix=$PWD/tmp $ make $ make install
會生成lib和include,其中libprotobuf-c.so* 需要複製到ARM開發板中(如/lib下)。
三、protobuf 試用
1. 建立 msg.proto 檔案
syntax = "proto3";
message MB04RSP
{
string name = 1;
uint32 addr = 2;
uint32 num = 3;
repeated uint32 data = 4;
}
2. protoc 生成 c 程式碼
$ protoc --c_out=. msg.proto
結果會自動生成 msg.pb-c.c 和 msg.pb-c.h
3. 主要API
msg.pb-c.h中列出了訊息結構序列化、反序列化的API。
/* 初始化MB04RSP訊息結構體 */ void mb04_rsp__init (MB04RSP *message); /* 將訊息體 message 序列化到 out 緩衝區 ,返回序列化後位元組長度 */ size_t mb04_rsp__pack (const MB04RSP *message, uint8_t *out); /* 從緩衝區data 反序列化 到訊息結構 MB04RSP, 返回結構體指標(指向記憶體預設為堆) */ MB04RSP * mb04_rsp__unpack (ProtobufCAllocator *allocator, size_t len, const uint8_t *data); /* 釋放儲存反序列化返回的結構體記憶體 */ void mb04_rsp__free_unpacked (MB04RSP *message, ProtobufCAllocator *allocator);
交叉編譯app時記得連線第二節生成的 ARM平臺庫 libprotobuf-c.so*。
參考博文: https://blog.csdn.net/zhengnianli/article/details/110914259