Qt Creator + Windows + Protobuf 最优方案(Mqqt通讯采用的方式)

1、弄清楚需要的版本 protobuf-3.14.0

2、protoc-3.14.0-win32 确定当前编译版本 32位或64位

3、总体思路

应用程序调用protobuf库,然后通过protoc工具将配置文件MqttMsg.proto生成C++或者java代码,C++产生:MqttMsg.pb.cc和MqttMsg.pb.h 文件。

VS2015代码通过调用这两个文件的接口,实现与MQQT代理服务器实现通信;

4、实现方式

官网有下载,当前的版本位34.1版本,我们使用旧版本3.14.0版本;

版本需要一致, 可以使用对应版本的库文件和potoc.exe编译proto文件,也可以官网下载一个开源代码,自己编译生成,自己编译比较麻烦,但也不是不可行。

5、开源代码编译实现经验总结

**第一步:gethub 下载源码:**Protocol Buffers v3.14.0Release Protocol Buffers v3.14.0 · protocolbuffers/protobuf · GitHubhttps://github.com/protocolbuffers/protobuf/releases/tag/v3.14.0将代码放到D盘根目录中,

(曾经下载Windows下CMake 3.18.0版本安装包对代码编译,失败)

正确的方法如下:

  1. 打开正确的工具(必须!)

开始菜单 → Visual Studio 2015 →

VS2015 x86 本机工具命令提示符】

(黑色窗口,名字完全一样,不是 PowerShell,不是普通 CMD)

  1. 直接复制下面这一整段,粘贴进去运行

cmd

cd /d D:\protobuf-3.14.0

rmdir /s /q build_x86

mkdir build_x86

cd build_x86

cmake -G "Visual Studio 14 2015" -A Win32 -Dprotobuf_BUILD_SHARED_LIBS=OFF -Dprotobuf_BUILD_TESTS=OFF -Dprotobuf_MSVC_STATIC_RUNTIME=ON ../cmake

cmake --build . --config Debug

cmake --build . --config Release

❌ 绝对不要用

  • PowerShell
  • VS 自带的 PowerShell
  • 普通 cmd(没配置 VS 环境)

你报错的根本原因

.. 在 PowerShell 里是语法符号,被当成代码解析了,所以直接报错!

换成 VS2015 x86 本机命令提示符,一秒解决!

成功之后会产生VS2015的项目文件,例如:

项目打开如下:

如果配置没有问题就可以直接编译产生我们自己编译的静态库文件了;

出现报错:

严重性 代码 说明 项目 文件 行 禁止显示状态 错误 LNK2038 检测到"RuntimeLibrary"的不匹配项: 值"MTd_StaticDebug"不匹配值"MDd_DynamicDebug"(data.obj 中) Client D:\workspace\code\src\TSV790Server\TSV790Server\Client\libprotobufd.lib(common.obj) 1

这是因为项目配置选项存在差异,需要重新编译才可以,处理方案如下:

  1. 检查项目设置
    • 在项目属性中,导航到 "C/C++" -> "代码生成",查看 "运行库" 设置。
    • 确保所有项目(包括依赖库项目)都使用相同的运行库选项:
      • MTd (多线程静态调试)
      • MDd (多线程动态调试)
  2. 修改运行库
    • 如果您的项目需要使用多个库,确保它们都使用相同的运行库设置。可以更改项目设置为相应的选项。
  3. 重新生成解决方案
    • 在修改运行库设置之后,进行"清理"并重新生成解决方案,以确保所有对象文件和库文件都是使用相同的设置构建的。
  4. 检查所有依赖项
    • 如果使用的是第三方库(如 libprotobufd.lib),确保它们是使用相同的编译选项构建的。如果不存在,可以尝试重新编译这些库

生成库和调用库的编译必须一致才可以,

例如:

项目需要引用头文件:

注意产生的lib库,放到合适的位置;

6、文件生成

通过开源编译的protoc.exe 程序进行生成;

加载到我们自己的程序里面即可调用。

相关推荐
爱学习的小白柏1 小时前
【AI问数技术】多Agent协同架构:查询规划/SQL生成/洞察分析/报告生成
java·网络·人工智能·windows·sql·架构·llama
艾伦_耶格宇1 小时前
【AI】-4 OpenCode Go 接入 Obsidian 完整指南
运维·开发语言·人工智能·agent·opencode
旋生万物1 小时前
【终极实战】用Python从零“生成“一个宇宙:螺旋干涉模型的代码实现
开发语言·前端·人工智能·react.js·php·wpf
16月6日-晴2 小时前
Java面向对象进阶—多态
java·开发语言
冯汉栩3 小时前
Swift Control RollingCountdownView(动画倒计时)
开发语言·ios·swift
lisanmengmeng3 小时前
搭建elk环境并接入frostmourne,实现监控报警效果(五)
开发语言·elk·日志·日志监控
oh,huoyuyan3 小时前
JS 动态网页抓不到?试试火车采集器网页抓取工具
开发语言·javascript·ecmascript
风流 少年3 小时前
hutool
java·服务器·开发语言
一木 之林4 小时前
四、STL容器与数据结构
开发语言·数据结构·c++
QX_hao4 小时前
【Go】--Cobra-cli的用法
开发语言·后端·golang