当前位置: 首页 > news >正文

VS2015+QT编译protobuf库

VS2015+QT编译protobuf库

  • VS2015+QT编译protobuf库
    • 下载
    • 编译过程
    • 参考链接

VS2015+QT编译protobuf库

虽然qt有QDataStream可以进行序列化,但其他框架如果读取QDataStream序列化的数据还需要特殊处理,所以选择一个通用的框架还是有必要,于是选择了protobuf。

下载

注意 protobuf版本,最新版本不支持VS2015
选择protobuf-3.15.0或者protobuf-3.7.0
protobuf-3.15.0
protobuf-3.7.0

编译过程

编译链:cmake version 3.31.0、VS2015
首先,下载好protobuf,如protobuf-3.7.0。
然后打开cmake,要先选择源码位置(CMakeLists.txt所在位置)以及输出位置,然后点configure会弹出编译链选项,选择VS2015,win32(我是32位的,64位的就选X64),点configure,会出现以下的选项,勾选生成动态库的选项,最后点generate就会在输出目录生成protobuf.sln。用VS2015打开protobuf.sln。
在这里插入图片描述

在这里插入图片描述
在VS2015生成库完成后,可以在输出目录下找到release目录(如果选择debug编译就是在debug目录)找到生成的protobuf库和protobuf生成器。如下图:在这里插入图片描述
接下来就是测试protobuf库和protobuf生成器了。首先,要先使用protobuf.exe生成protobuf消息序列类。命令如下,SRC_DIR就是 *.proto文件所在的位置,DST_DIR是最终生成类文件的位置。所以在生成类之前还需要写一个*.proto用于声明类。
命令:

protoc -I=$SRC_DIR --cpp_out=$DST_DIR $SRC_DIR/addressbook.proto
./protoc.exe -I="." --cpp_out=./ person.proto

person.proto

syntax = "proto2";package tutorial;message Person {optional string name = 1;optional int32 id = 2;optional string email = 3;enum PhoneType {PHONE_TYPE_UNSPECIFIED = 0;PHONE_TYPE_MOBILE = 1;PHONE_TYPE_HOME = 2;PHONE_TYPE_WORK = 3;}message PhoneNumber {optional string number = 1;optional PhoneType type = 2 [default = PHONE_TYPE_HOME];}repeated PhoneNumber phones = 4;
}message AddressBook {repeated Person people = 1;
}

调用命令:./protoc.exe -I=“.” --cpp_out=./ person.proto
会生成两个文件,就是类文件。如下:
在这里插入图片描述
接下来创建qt项目文件进行测试(VS2015-32位-Release),pro文件配置如下:
注意要定义PROTOBUF_USE_DLLS,这是动态库调用必需的,反正当前版本需要

DEFINES+=PROTOBUF_USE_DLLS
INCLUDEPATH += D:/protobuf/protobuf-3.7.0/src/
#LIBS += -LD:/protobuf/protobuf-cpp-3.15.0/protobuf-3.15.0/new_build/Release -llibprotobuf -llibprotoc -lgmock -lgmock_main -llibprotobuf-lite
# 简化后的LIBS配置(只保留必要的protobuf库)
LIBS += -LD:/protobuf/protobuf-3.7.0/cmake/newbuild/Release -llibprotobuf -llibprotobuf-lite

将生成的类文件也添加进入项目里面,然后选择清除、执行qmake、构建项目。编译通过,表明库编译成功 。

参考链接

官方文档
官方编译文档
protoc 编译 javalite protobuf编译器
vs2015 编译 protobuf


文章转载自:

http://gU9Iy8ZZ.Lmrcq.cn
http://1TdDrZi6.Lmrcq.cn
http://VB9ROsyM.Lmrcq.cn
http://DSYkGO1H.Lmrcq.cn
http://h1oSV9oI.Lmrcq.cn
http://4SatRz8H.Lmrcq.cn
http://vNOkU7ME.Lmrcq.cn
http://jqtyeoos.Lmrcq.cn
http://L6xCh346.Lmrcq.cn
http://AgmGaQGH.Lmrcq.cn
http://4uovgycp.Lmrcq.cn
http://HRd6zP44.Lmrcq.cn
http://u1GAdoUL.Lmrcq.cn
http://i6piPpWp.Lmrcq.cn
http://qWXsg7Rd.Lmrcq.cn
http://JgcOciHF.Lmrcq.cn
http://cp7LlyZk.Lmrcq.cn
http://XFrz8PMI.Lmrcq.cn
http://bOZQULPU.Lmrcq.cn
http://rmVnxApN.Lmrcq.cn
http://bKgjEdOM.Lmrcq.cn
http://ANWLNGob.Lmrcq.cn
http://Fbyvns5O.Lmrcq.cn
http://m2SX8l4U.Lmrcq.cn
http://n79OIaaS.Lmrcq.cn
http://pS3VnVwd.Lmrcq.cn
http://K3xTjSXL.Lmrcq.cn
http://4AMXznQR.Lmrcq.cn
http://kI4ZZ0ZX.Lmrcq.cn
http://c7ps1Kyh.Lmrcq.cn
http://www.dtcms.com/a/365039.html

相关文章:

  • Java--json与map,colloct与流
  • SpringMVC的请求接收与结果响应
  • Python爬取nc数据
  • 数据科学家如何更好地展示自己的能力
  • 理解sed命令
  • 干货知识:ERP、CRM、OA,小公司到底先上哪个?
  • 从 0 到 1 实现 PyTorch 食物图像分类:核心知识点与完整实
  • k8s知识点总结3
  • 基于 CC-Link IE FB 转 DeviceNet 技术的三菱 PLC 与发那科机器人在汽车涂装线的精准喷涂联动
  • Grafana Loki日志聚合系统深度解析:选型、竞品、成本与资源消耗
  • 安卓9.0系统修改定制化____如何修改安卓低版本固件 解决 API/SDK 版本过低的问题
  • 题解:UVA1589 象棋 Xiangqi
  • 根据fullcalendar实现企业微信的拖动式预约会议
  • 别错过!一杯奶茶钱开启企业微信 Power BI 之旅
  • gitlab推送失败,内存不足的处理
  • iOS蓝牙使用及深入剖析高频高负载传输丢包解决方案(附源码)
  • 【STL】C++ 开发者必学字符类详解析:std::string
  • 【人工智能学习之MMdeploy部署踩坑总结】
  • Linux之shell-awk命令详解
  • Ai Qwen3解答epochs多少为最佳 仅共参考
  • AI时代:智能体系统构建基本范式
  • 峰谷套利+动态增容:工商业储能能量管理系统的妙用
  • Docker容器与镜像:两种导入导出方式全解析
  • 洛谷 P3128 [USACO15DEC] Max Flow P -普及+/提高
  • 企业实用——MySQL的备份详解
  • Airsim 笔记:Python API 总结
  • 部署jenkins并基于ansible部署Discuz应用
  • 【ASP.NET Core】基于MailKit(SMTP 协议)实现邮件发送
  • Hadoop HDFS-SecondaryNameNode(2nn)详细介绍
  • 趣味学RUST基础篇(泛型)