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 · GitHub
https://github.com/protocolbuffers/protobuf/releases/tag/v3.14.0将代码放到D盘根目录中,

(曾经下载Windows下CMake 3.18.0版本安装包对代码编译,失败)
正确的方法如下:
- 打开正确的工具(必须!)
开始菜单 → Visual Studio 2015 →
【 VS2015 x86 本机工具命令提示符】
(黑色窗口,名字完全一样,不是 PowerShell,不是普通 CMD)
- 直接复制下面这一整段,粘贴进去运行
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
这是因为项目配置选项存在差异,需要重新编译才可以,处理方案如下:
- 检查项目设置 :
- 在项目属性中,导航到 "C/C++" -> "代码生成",查看 "运行库" 设置。
- 确保所有项目(包括依赖库项目)都使用相同的运行库选项:
- MTd (多线程静态调试)
- MDd (多线程动态调试)
- 修改运行库 :
- 如果您的项目需要使用多个库,确保它们都使用相同的运行库设置。可以更改项目设置为相应的选项。
- 重新生成解决方案 :
- 在修改运行库设置之后,进行"清理"并重新生成解决方案,以确保所有对象文件和库文件都是使用相同的设置构建的。
- 检查所有依赖项 :
- 如果使用的是第三方库(如 libprotobufd.lib),确保它们是使用相同的编译选项构建的。如果不存在,可以尝试重新编译这些库
生成库和调用库的编译必须一致才可以,
例如:

项目需要引用头文件:



注意产生的lib库,放到合适的位置;
6、文件生成
通过开源编译的protoc.exe 程序进行生成;


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