IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> Windows下c++中使用protobuf 3 -> 正文阅读

[开发工具]Windows下c++中使用protobuf 3

作者:recommend-item-box type_blog clearfix

一、环境的安装

到github下载protobuf-cpp的包和protoc-win64的包

Release Protocol Buffers v3.7.1 · protocolbuffers/protobuf · GitHub

1.1 对于protoc-win64的包

将其解压,放到喜欢的路径下,然后将该路径加到系统环境变量中,接着可以用cmd测试一下,protoc命令是否可用

?

?

?上图表示可以用,如果不可以用,重启一下cmd,如果还是不行,自行百度了

1.2对于protobuf-cpp的包

解压到路径,然后用cmake完成Configure,,Generate,,Open Project(不会的自行百度)

用vs2019(或者其他版本)分别编译libprotobuf,protoc,libprotoc这三个

?

编译完成后,在目标目录下找到相应的版本,我用的release模式

?将release中这四个的拷贝到一个新的文件夹lib中

?再新建一个include文件夹将解压出来的包中的src文件夹中的google文件夹拷贝进去

?

?最后一步,将lib文件中的dll文件拷贝到C:\Windows\System32中(防止运行程序找不到动态库)

至此,我们得到了两个文件夹,分别是lib和include,这两个文件可以放在固定的地方,也可以跟随项目,拷贝到项目文件夹中去(我是拷贝到项目中去的)

二、protobuf测试

创建一个vs项目,在项目文件夹中新建一个msg.proto文件,内容如下

syntax="proto3";
package lm;
message helloworld 
{ 
    int32 id = 1;       // ID 
    string str = 2;     // str 
    int32 opt = 3;      //optional field 
}

接着打开cmd用protoc执行此文件,指令如下,只需要将文件路径填写上去,和文件名字填写上去就可以

//SRC_DIR   .proto文件存放目录
//--cpp_out  指示编译器生成C++代码,DST_DIR为生成文件存放目录
//game.proto 待编译的协议文件
protoc -I=$SRC_DIR --cpp_out=$DST_DIR $SRC_DIR/game.proto

完成后会得到两个文件,分别是msg.pb.h和msg.pb.cc

至此,完成了准备工作,接着打开vs项目,添加这两个文件到项目中以及做一些其他配置工作,如下

?添加三个文件,main.cpp内容如下

#include "msg.pb.h" 
#include <fstream> 
#include <iostream> 
using namespace std; 
void ListMsg(const lm::helloworld& msg) 
{
	cout << msg.id() << endl;
	cout << msg.str() << endl;
}
void test_write()
{
	lm::helloworld msg1; 
	msg1.set_id(101); 
	msg1.set_str("hello"); 
	fstream output("./log", ios::out | ios::trunc | ios::binary); 
	if (!msg1.SerializeToOstream(&output)) 
	{ 
		cerr << "Failed to write msg." << endl; return ; 
	}
}
void test_read()
{
	lm::helloworld msg1;

	{
		fstream input("./log", ios::in | ios::binary);
		if (!msg1.ParseFromIstream(&input)) {
			cerr << "Failed to parse address book." << endl;
			return ;
		}
	}

	ListMsg(msg1);
}
int main(void) 
{ 
	test_write();
	test_read();
	return 0; 
}

vs配置属性有以下,不配置可能会出错

根据生成的protobuf库相应配置,我是release x64版本,将我们生成的lib和include添加到这两个路径

?预处理加上 PROTOBUF_USE_DLLS,否则大量报错

?

?链接器输入中添加libprotobuf.lib和libprotoc.lib

?至此配置完成,直接运行看结果

?至此结束

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-02-26 11:50:46  更:2022-02-26 11:51:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 7:32:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码