windows mac双系统下QT中使用protobuf

protobuf 是一个轻量化传输协议。由于其轻量的特点,非常适合单片机等低功耗设备数据通信使用。我们日常生活中的电子产品,包括蓝牙、串口,车辆、耳机等设备大多由proto的身影

windows版本

一 配置环境

  1. 下载proto 源文件
    https://github.com/protocolbuffers/protobuf/releases,在里面找到protobuf-cpp-x.x.x.x
  2. 进入 src 文件夹下 更新所有依赖 git submodule update --init --recursive
  3. 下载cmake
  4. 使用cmake 输入目录选择在protobuf下的cmake文件夹,点击generate后,勾选protobuf_build_shared_libs
  5. 点击生成
  6. 生成后的项目文件可在vs中打开运行,改为release后点击生成
    然后D:\proj\qt\pp\grpc\protobuf\complied\Release 就能看到用于编译proto的protoc.exe了

二 产出proto

  1. 根据规则定义proto文件(定义数据格式)
    文档 https://developers.google.cn/protocol-buffers/docs/overview
  2. 生成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

  1. 在proj文件中添加 INCLUDEPATH += D:\proj\qt\pp\protoPlugs\protobuf\src
    (git源文件中的路径)
  2. LIBS += -LD:\proj\qt\pp\protoPlugs\complied
    (make后的项目路径)
  3. 在文件中添加protoc 导出的cpp文件,包括.h 和.cc文件
  4. 在项目根目录下新建protobuf目录,然后进入protobuf下创建include和lib目录,include目录包括protobuf源代码下的src下的google整个文件夹,lib下包括你VS编译后生成的.lib和.dll文件
  5. 进入qt 右键项目
    添加库
    勾选动态库、windows
  6. 在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生成的版本不能直接拿来用,需要重新编译

  1. 下载protobuf包
    git clone https://github.com/protocolbuffers/protobuf.git
  2. 进入src文件夹
  3. 输入 ./configure
  4. 输入 make 编译
  5. 输入 make install
  6. 在项目根目录下创建include文件夹
  7. 完成后将包中的隐藏文件 .dlls 复制到include里,
  8. 在pro 文件中 inclued include文件夹
  9. 将src中的 googole 放在根目录下
  10. qt项目添加库,将.dlls中的.a文件加入
  11. 使用src中的protoc编译proto
  12. proto文件放在项目根目录下
  13. 执行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图标 需要用命令先生成不同尺寸的

  1. 回到图标文件夹上层,iconutil -c icns logo.iconset 将icon图标合成图标文件,
  2. 将图标文件放在根在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 [email protected]
    sips -z 32 32 logo.png --out icon_32.png
    sips -z 32 32 logo.png --out [email protected]
    sips -z 64 64 logo.png --out icon_64.png
    sips -z 64 64 logo.png --out [email protected]
    sips -z 128 128 logo.png --out icon_128.png
    sips -z 128 128 logo.png --out [email protected]
    sips -z 256 256 logo.png --out icon_256.png
    sips -z 256 256 logo.png --out [email protected]
    sips -z 512 512 logo.png --out icon_512.png
    sips -z 512 512 logo.png --out [email protected]

猜你喜欢

转载自blog.csdn.net/lengyoumo/article/details/125648139