windows mac双系统下QT中使用protobuf
admin
2024-05-01 01:24:09
0

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

windows版本

一 配置环境

  1. 下载proto打包器。用于生产数据解析文件
    https://github.com/protocolbuffers/protobuf/releases

  2. 下载protobuf 源文件 下载cmake
    https://github.com/protocolbuffers/protobuf
    下载后执行 更新所有依赖
    git submodule update --init --recursive

  3. 然后使用cmake input目录在protobuf下的cmake文件夹
    勾选protobuf_build_shared_libs
    然后直接生成即可

  4. 生成后的项目文件可在vs中打开运行,改为release后点击生成
    然后D:\proj\qt\pp\grpc\protobuf\complied\Release 既有文件了

二 产出proto

  1. 根据规则定义proto文件(定义数据格式)
    文档 https://developers.google.cn/protocol-buffers/docs/overview
  2. 生成proto文件.
    进入刚才我们cmake生成的 protoc.exe所在的目录,然后输入命令:./protobuf-21.4/src/protoc -I=. --cpp_out=./ a.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包
  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编译,

其他

编译好软件后,需要加入依赖库才能脱机运行

找到当前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 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

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
JAVA多线程知识整理 Java多线程基础 线程的创建和启动 继承Thread类来创建并启动 自定义Thread类的子类&#...
【洛谷 P1090】[NOIP... [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G ...
国民技术LPUART介绍 低功耗通用异步接收器(LPUART) 简介 低功耗通用异步收发器...
城乡供水一体化平台-助力乡村振... 城乡供水一体化管理系统建设方案 城乡供水一体化管理系统是运用云计算、大数据等信息化手段࿰...
程序的循环结构和random库...   第三个参数就是步长     引入文件时记得指明字符格式,否则读入不了 ...
中国版ChatGPT在哪些方面... 目录 一、中国巨大的市场需求 二、中国企业加速创新 三、中国的人工智能发展 四、企业愿景的推进 五、...
报名开启 | 共赴一场 Flu... 2023 年 1 月 25 日,Flutter Forward 大会在肯尼亚首都内罗毕...
汇编00-MASM 和 Vis... Qt源码解析 索引 汇编逆向--- MASM 和 Visual Studio入门 前提知识ÿ...
【简陋Web应用3】实现人脸比... 文章目录🍉 前情提要🌷 效果演示🥝 实现过程1. u...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
windows安装JDK步骤 一、 下载JDK安装包 下载地址:https://www.oracle.com/jav...
分治法实现合并排序(归并排序)... 🎊【数据结构与算法】专题正在持续更新中,各种数据结构的创建原理与运用✨...
在linux上安装配置node... 目录前言1,关于nodejs2,配置环境变量3,总结 前言...
Linux学习之端口、网络协议... 端口:设备与外界通讯交流的出口 网络协议:   网络协议是指计算机通信网...
Linux内核进程管理并发同步... 并发同步并发 是指在某一时间段内能够处理多个任务的能力,而 并行 是指同一时间能够处理...
opencv学习-HOG LO... 目录1. HOG(Histogram of Oriented Gradients,方向梯度直方图)1...
EEG微状态的功能意义 导读大脑的瞬时全局功能状态反映在其电场结构上。聚类分析方法一致地提取了四种头表面脑电场结构ÿ...
【Unity 手写PBR】Bu... 写在前面 前期积累: GAMES101作业7提高-实现微表面模型你需要了解的知识 【技...