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 程序进行生成;

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

相关推荐
读书札记20221 小时前
Qt Creator 调试报错:Unable to create a debugging engine.
开发语言·qt
cpp_learners1 小时前
QT 使用 QXlsx 时遇到包含 <private/qzipreader_p.h> 和 <private/qzipreader_p.h> 错误的解决方案
qt·qxlsx·quazip
小书房1 小时前
Kotlin协程的运行原理
android·开发语言·kotlin·协程
隐退山林1 小时前
JavaEE进阶:SpringIoC&DI
java·开发语言·java-ee
水煮白菜王1 小时前
Claude Code 全方位使用手册
java·开发语言·网络
Highcharts.js1 小时前
金融Web App中的复杂时序数据可视化:从选型到高性能实践
开发语言·金融·highcharts·实战代码·响应式图表
小茬粥1 小时前
COLT_CMDB_nvidia_gpu_20260508.sh
linux·服务器·windows
郝学胜-神的一滴1 小时前
跨平台 C++ 静态库编译实战:Linux/Windows/macOS 三端统一实现
linux·开发语言·c++·windows·软件构建
xyq20241 小时前
XHR 请求详解
开发语言