protobuf的编译和使用,在windows平台上
0 准备工作:
(1)下载protobuf
https://github.com/google/protobuf/releases
下载的是cpp版本,选择当前最新版本即可
(2)安装cmake
https://cmake.org/download/
根据系统选择安装的cmake版本,我这里选择的是64位版本安装。
1 编译protocol
解压刚才下载的protobuf包,打开cmake
按图所示,1选择protobuf中的cmake目录,2是选择目标目录(生成的工程存放位置),3的点击左下角的configure按钮:
以vs2015工程为例,上面的一个框是32位版本,下面的Win64是64位版本。以生成32位版本为例,生成64位版本工程操作相同。
点击finish
没有错误,generate按钮变为可用,默认的选项如图,这里就默认生成静态包。
点击generate按钮后,几秒后,Open Project按钮变为可用,打开工程
这里可以选择生成Debug版本32位的lib,只生成libprotobuf和protoc即可。
这3个是我们需要的。
3 测试生成的lib库和protoc.exe工具
(1)新建一个person.proto的文本文件
package tutorial;
message Person {
required int32 id = 1;
required string name = 2;
optional string email = 3;
}
tutorial是包名(也可以说是命名空间),没有第一行的话,就是没有命令空间的。
将protoc.exe和person.proto放在同一个文件夹下,再添加一个批处理文件build.bat,内容为:
protoc --cpp_out=./ person.proto
双击批处理文件build.bat,会在当前目录下生成:person.pb.h和person.pb.cc文件,将其添加到下面的vs工程中。
(2)建立一个win32控制台程序的工程
把protobuf-3.6.1\src\google\protobuf这个目录中的头文件(其余的文件可以删除,也可以保留,不影响),都拷贝过来,放在当前工程下,建立一个include文件夹,把这些.h头文件放进去(文件夹名自己定)。
生成的libprotobufd.lib也拷贝过来,放在当前目录下的lib文件夹(自己新建的文件夹)中。
设置工程:
main.cpp代码:
#include <iostream>
#include <fstream>
#include <string>
#include "person.pb.h"
using namespace std;
int main(int argc, char* argv[])
{
GOOGLE_PROTOBUF_VERIFY_VERSION;
tutorial::Person person;
//将数据写到person.pb文件
person.set_id(123456);
person.set_name("Mark");
person.set_email("mark@example.com");
fstream out("person.pb", ios::out | ios::binary | ios::trunc);
person.SerializeToOstream(&out);
out.close();
//从person.pb文件读取数据
fstream in("person.pb", ios::in | ios::binary);
if (!person.ParseFromIstream(&in)) {
cerr << "Failed to parse person.pb." << endl;
exit(1);
}
cout << "ID: " << person.id() << endl;
cout << "name: " << person.name() << endl;
if (person.has_email()) {
cout << "e-mail: " << person.email() << endl;
}
getchar();
return 0;
}
这两个生成的文件要记得添加到工程中
编译过程:
1>------ 已启动全部重新生成: 项目: pbDemo, 配置: Debug Win32 ------
1> person.pb.cc
1> main.cpp
1> 正在生成代码...
1> pbDemo.vcxproj -> D:\VS2015_Project\pbDemo\Debug\pbDemo.exe
1> pbDemo.vcxproj -> D:\VS2015_Project\pbDemo\Debug\pbDemo.pdb (Full PDB)
========== 全部重新生成: 成功 1 个,失败 0 个,跳过 0 个 ==========
运行结果:
参考:
https://blog.csdn.net/program_anywhere/article/details/77365876
https://blog.csdn.net/lifeng_math/article/details/51993698
https://blog.csdn.net/qing666888/article/details/79137963
VS2013编译错误:-D_SCL_SECURE_NO_WARNINGS解决方案:
https://blog.csdn.net/Apollon_krj/article/details/68923683
warning LNK4099: PDB 原因及解决方案:
http://www.cnblogs.com/fqucuo/p/4887083.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)