您的位置:首页 > 游戏 > 手游 > visual studio 2022配置和使用protobuf

visual studio 2022配置和使用protobuf

2024/12/23 4:46:16 来源:https://blog.csdn.net/qq_45576085/article/details/140035857  浏览:    关键词:visual studio 2022配置和使用protobuf

上图证明,我真的测了好多遍,测了好多版本的protobuf,花了很多时间。不过好在最后在vs2022上测通了。

下载protobuf

这里是protobuf下载的地址。

Releases · protocolbuffers/protobuf · GitHub

个人使用的3.21.9这个版本才跑通的。

1、首先解压protobuf-cpp-3.21.9.zip文件,得到protobuf-cpp-3.21.9文件

2、进入protobuf-cpp-3.21.9文件,创建一个visual studio文件夹

下载cmake工具

cmake是一款十分强大的开源跨平台的构建工具,我们需要使用它构建库文件。

大家可以去官网下载,下边是网址:

Download CMake

生成库文件

1、下载完成之后,打开cmake工具

2、where is the source code选择我们刚刚加压的protobuf-cpp-3.21.9文件夹下的cmake文件夹

3、where to build the binaries选择protobuf-cpp-3.21.9文件下创建的visual studio文件夹

4、点击configure配置我们需要生成项目文件,我们选择visual studio 17 2022即可

configure完成之后,选中你需要生成的文件,下边框框是我选中的生成文件,然后再次点击configure,generate就完成了。

观察下边的提示信息,就表示构建完成了。然后进入protobuf-cpp-3.21.9文件下创建的visual studio文件夹,就有生成好的文件了。

然后带点击打开protobuf.sln项目文件

编译时可以选择debug和release,建议每一个都编译一遍,这样就有debug和release两个版本的库了。
我选择的是X64位的debug模式编译,生成的库在visualstudio目录下的Debug文件夹里。选择重新编译。这个过程可能需要几分钟。

到这里,我们的库文件就生成成功了。

这里就是生成的库文件位置。

在当前路径进入cmd,输入protoc --version命令,检测库文件生成成功的效果如下。

添加环境变量

创建一个protoc文件夹,进入protoc文件下创建一个bin和include文件夹

将visualstudio目录下的Debug文件夹下的下边几个库文件拷到bin文件夹下

将protobuf-3.21.9文件夹下的src文件的下的google文件拷贝至include文件下。

设置环境,把新建的bin路径写在新建的路径下。最后点击确定

检测环境变量是否设置成功。

打开终端输入protoc --version

这就表示环境变量配置成功了。

使用protobuf

首先使用visual studio创建一个新的项目文件,打开其项目文件,创建一个msg.proto文件

msg.proto文件中输入以下代码,这里代码语法是protobuf3的语法,感兴趣的人可以去了解下。

在文件目录下按住shift+右键,点击powershell窗口。输入protoc  --cpp_out=. ./msg.proto,然后回车

接下来文件目录会出现新的文件如下

在vs中右键添加现存文件,把刚刚生成的新文件添加进来

visual studio配置

配置项目的包含路径和库文件路径,这里的包含路径和库文件路径,就是我们刚刚创建的include和bin路径。

添加链接库,添加protobuf用到的lib库

配置代码生成的运行库,我们这里用的是多线程调试MDd。

这是引入proto文件生成的头文件点击编译。出现报错

在头文件中添加

#define PROTOBUF_USE_DLLS再次编译文件。

这里就编译完成了,就能正常的使用protobuf了。

编写实例代码

#include <iostream>
#include "msg.pb.h"
int main()
{//std::cout << "Hello World!\n";Msg msg;msg.set_name("CPP programing");msg.set_age(1);std::string msgstr;msg.SerializeToString(&msgstr);std::cout << "serialize str is " << msgstr << std::endl;Msg msg2;msg2.ParseFromString(msgstr);std::cout << "msg2 name is " << msg2.name() << " age is "<< msg2.age() << std::endl;getchar();
}

运行结果:

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com