protobuf 是一个轻量化传输协议。由于其轻量的特点,非常适合单片机等低功耗设备数据通信使用。我们日常生活中的电子产品,包括蓝牙、串口,车辆、耳机等设备大多由proto的身影
windows版本
一 配置环境
- 下载proto 源文件
https://github.com/protocolbuffers/protobuf/releases,在里面找到protobuf-cpp-x.x.x.x - 进入 src 文件夹下 更新所有依赖 git submodule update --init --recursive
- 下载cmake
- 使用cmake 输入目录选择在protobuf下的cmake文件夹,点击generate后,勾选protobuf_build_shared_libs
- 点击生成
- 生成后的项目文件可在vs中打开运行,改为release后点击生成
然后D:\proj\qt\pp\grpc\protobuf\complied\Release 就能看到用于编译proto的protoc.exe了
二 产出proto
- 根据规则定义proto文件(定义数据格式)
文档 https://developers.google.cn/protocol-buffers/docs/overview - 生成proto文件.
进入刚才我们cmake生成的 protoc.exe所在的目录,这一点很重要,否则可能会inputfile miss,然后输入命令:proto.exe -I=D:\proj\protobuf --cpp_out=.\ D:protobufFile*.proto
“ -I=.”的意思是输入目录, “–cpp_out=./” 指的是cpp语言输出目录,“xx.proto”指的是目录下的哪个文件。注意不同平台下的斜杠方向~~!!
三 QT中加入proto
- 在proj文件中添加 INCLUDEPATH += D:\proj\qt\pp\protoPlugs\protobuf\src
(git源文件中的路径) - LIBS += -LD:\proj\qt\pp\protoPlugs\complied
(make后的项目路径) - 在文件中添加protoc 导出的cpp文件,包括.h 和.cc文件
- 在项目根目录下新建protobuf目录,然后进入protobuf下创建include和lib目录,include目录包括protobuf源代码下的src下的google整个文件夹,lib下包括你VS编译后生成的.lib和.dll文件
- 进入qt 右键项目
添加库
勾选动态库、windows - 在proj文件中添加 DEFINES += PROTOBUF_USE_DLLS
我电脑里的base) D:\proj\qt\pp\plugs\protobuf\complied\Release>protoc -I=D:\proj\qt\pp. --cpp_out=D:\proj\qt\pp\ a.proto
mac版本
windows生成的版本不能直接拿来用,需要重新编译
- 下载protobuf包
git clone https://github.com/protocolbuffers/protobuf.git - 进入src文件夹
- 输入 ./configure
- 输入 make 编译
- 输入 make install
- 在项目根目录下创建include文件夹
- 完成后将包中的隐藏文件 .dlls 复制到include里,
- 在pro 文件中 inclued include文件夹
- 将src中的 googole 放在根目录下
- qt项目添加库,将.dlls中的.a文件加入
- 使用src中的protoc编译proto
- proto文件放在项目根目录下
- 执行debug编译,
其他
如果发生protofuf string字符解析推荐使用byts的问题,一定是输出版本的打包器用错了。推荐用msv2019 + release
如果输出后缺少absl库,一定是你下错了protobuf的源文件,或是qt.pro文件配置有问题
编译好软件后,需要加入依赖库才能脱机运行
找到当前qt安装目录下的macdeployqt工具,输入/macdeployqt soft.app 等待即可生成依赖
会遇到的问题之一: google::protobuf::internal::intamata refrence from
该问题是编码问题 intamata的解构函数~intamata 前面加上explict 就好了
qt 图标生成命令
icon图标 需要用命令先生成不同尺寸的
- 回到图标文件夹上层,iconutil -c icns logo.iconset 将icon图标合成图标文件,
- 将图标文件放在根在resources目录下,并在pro文件中添加macx: ICON = $$PWD/resources/logo.icns
sips -z 16 16 logo.png --out icon_16.png
sips -z 16 16 logo.png --out icon_16@2x.png
sips -z 32 32 logo.png --out icon_32.png
sips -z 32 32 logo.png --out icon_32@2x.png
sips -z 64 64 logo.png --out icon_64.png
sips -z 64 64 logo.png --out icon_64@2x.png
sips -z 128 128 logo.png --out icon_128.png
sips -z 128 128 logo.png --out icon_128@2x.png
sips -z 256 256 logo.png --out icon_256.png
sips -z 256 256 logo.png --out icon_256@2x.png
sips -z 512 512 logo.png --out icon_512.png
sips -z 512 512 logo.png --out icon_512@2x.png