protobuf 是一个轻量化传输协议。由于其轻量的特点,非常适合单片机等低功耗设备数据通信使用。我们日常生活中的电子产品,包括蓝牙、串口,车辆、耳机等设备大多由proto的身影
windows版本
一 配置环境
-
下载proto打包器。用于生产数据解析文件
https://github.com/protocolbuffers/protobuf/releases
-
下载protobuf 源文件 下载cmake
https://github.com/protocolbuffers/protobuf
下载后执行 更新所有依赖
git submodule update --init --recursive
-
然后使用cmake input目录在protobuf下的cmake文件夹
勾选protobuf_build_shared_libs
然后直接生成即可
-
生成后的项目文件可在vs中打开运行,改为release后点击生成
然后D:\proj\qt\pp\grpc\protobuf\complied\Release 既有文件了
二 产出proto
- 根据规则定义proto文件(定义数据格式)
文档 https://developers.google.cn/protocol-buffers/docs/overview - 生成proto文件.
进入刚才我们cmake生成的 protoc.exe所在的目录,然后输入命令:./protobuf-21.4/src/protoc -I=. --cpp_out=./ a.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包
- 进入src文件夹
- 输入 ./configure
- 输入 make 编译
- 输入 make install
- 在项目根目录下创建include文件夹
- 完成后将包中的隐藏文件 .dlls 复制到include里,
- 在pro 文件中 inclued include文件夹
- 将src中的 googole 放在根目录下
- qt项目添加库,将.dlls中的.a文件加入
- 使用src中的protoc编译proto
- proto文件放在项目根目录下
- 执行debug编译,
其他
编译好软件后,需要加入依赖库才能脱机运行
找到当前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