protoc --cpp_out=. *.proto
--cpp_out=. 表示生成的C++文件的存放位置为当前文件
*.proto 表示将当前文件夹下的所有.proto文件编译
编译后生成了user.pb.h 和 user.pb.cc
将生成的.cc和.h文件添加到vs中。右击头文件或源文件选择添加/现有项即可添加。
添加之后可以看到里面一大片爆红,原因是找不到头文件。

因此需要在项目中添加头文件的包含目录以及库文件的目录:
首先,先说一个大坑,这个坑浪费了我半天时间,由于编译protobuf时,选择的平台是x64,因此在vs中也要将项目改为x64的,否则大概率无法运行。
先将include文件夹以及lib文件夹拷贝当当前工程目录下。
然后在解决方案上右击选择属性,
1、添加头文件目录
2、添加库文件目录
3、添加库文件
添加完成上面配置后,在user.pb.h头文件中引用的google等头文件就不会报错了,但是里面很可能还有其它的一些宏会报错,这个不用管他。
在main函数中写上测试代码:
#include <iostream>
#include <string>
#include "user.pb.h"
int main()
std::cout << "hello,world!" << std::endl;
mypb::User user;
user.set_username("root");
user.set_password("rootroot");
user.set_private_ip("192.168.226.186:6666");
std::string data = user.SerializeAsString();
std::cout << data << std::endl;
mypb::User newUser;
newUser.ParseFromString(data);
std::cout << newUser.password() << " " << newUser.username() << " "
<< newUser.private_ip() << std::endl;
return 0;
然后让你愉快地去运行代码地时候你会发现,报了一大堆错误。无法解析外部命令什么的。
这就是第二个坑了,这时需要在生成的pb.h文件中添加一个宏:
#define PROTOBUF_USE_DLLS
这时便可愉快地运行了。
其实在配置的时候,不止这些坑,光protobuf的版本我都来来回回下载测试了好几个。
不得不说,C++使用一个他人的库简直麻烦的要死,又要下载又要编译又要配置。就这些步骤烦都把人烦死了,不像Java,只需要在maven中导入一个坐标就可以愉快地使用了,也不像Go一样,只要import相应的包的github地址,一句 go mod tidy命令就解决了。
protobuf也叫protocol buffer, 是google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了多种语言的实现:java、c#、c++、go 和 python,每一种实现都包含了相应语言的编译器以及库文件。
由于它是一种二进制的格式,比使用 xml 、json进行数据交换快许多。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。作为一种效率和兼容性都很优秀的二进制数据传输格式,可以用于诸如网络传输、配置文件、数据存储等诸多领域。
protobuf在各种r
文章目录0. 前言1. VS2019 编译 Protobuf3. VS2019 项目中使用编译好的 Protobuf4. VS2019 的 CMake 项目中引入 Protobuf
0. 前言
由于对 Windows 和 VS2019 不太熟悉,在编译并使用 Protobuf 的过程中碰到很多问题,虽然没有完全解决,但勉强能用,这里记录一下。
使用VS2019编译 Protobuf
VS2019 项目中使用编译好的 Protobuf
Windows下的 CMake 项目中,引用编译好的 Prot
首先,在vs中建立一个c++项目,这里项目名称为test,将protobuf相关的头文件库文件配置好,这里采用的项目路径设置如下所示:
test\test\proto 目录存放*.proto文件
test\test\protocpp 目录存放生成的*.pb.h和*.pb.cc文件
test\lib\include 目录存放protobuf的头文件
test\lib\lib 目录存放protobu...
官网:https://github.com/protocolbuffers/protobuf/releases
protobuf托管在github,在windows上使用需要自己编译,编译需要借助cmake。大概流程是:
a.下载源码-->b.cmake生成vs工程-->c.vs编译(所需lib文件和protoc.exe)-->...
1、下载protobuf接下到项目解决方案文件夹deps下
2、附加包含目录:../deps/protobuf-2.5.0/src
3、附加库目录: ../deps/protobuf-2.5.0/lib/debug (release下:../deps/protobuf-2.5.0/lib/debug)
4、附加依赖性: libprotobuf.lib
5、预处理器定义:_SCL_S
1、官网下载cmake,并安装,提示选择添加环境变量,选择添加。
2、下载 protocolbuffer, https://github.com/google/protobuf/releases, 并解压
3、打开cmd工具,开始菜单->Microsoft Visual Studio 2010- > Visual Studio Tools->Visual Studio x64 Win64 Co
执行cmake编译后的可执行文件时报错如下:
what(): CHECK failed: (scc->visit_status.load(std::memory_order_relaxed)) == (SCCInfoBase::kRunning):
protoc --cpp_out=./ forward_protobuf.proto
单独的编译命令:g++ -o pub_boche2.out publish_boche.cpp protoBuf/forward_protobuf.pb.c...
当我们想要从一个proto文件中导入另一个proto文件时,我们需要使用到 import 命令,但是当我们在goland中使用import关键字导入同包下的proto文件时却显示报红问题(其实这不是写错了,而是goland的插件不识别的问题,如果你不在意报红的话,其实可以不处理,直接去命令行生成文件就可以了,没问题)。
//文件格式(这两个proto文件都在我的的proto包下)
proto
base.proto
hello.pro