VS2022配置protobuf环境

VS2022配置protobuf环境

*必须实例化,用main函数建立测试案例,否则无法正常编译

Protobuf版本3.21.12这是最后一个简单编译的版本,不依赖其他库

链接在这里:

https://github.com/protocolbuffers/protobuf/releases/download/v21.12/protobuf-cpp-3.21.12.zip

Cmake构建protobuf

解压并且得到对应的protobuf文件夹,建立build文件夹用于cmake生成项目文件

打开camke-gui 按图设置对应的目录

点击configure

选择VisualStudio 17 2022 平台选择x64

点击Finish

如图选择进行项目构建

点击Generate创建项目,点击OpenProject打开项目

此时会自动打开vs2022

直接运行项目,此时输出窗口会有编译信息,等待编译完成

出现如图就表示编译成功了,无法启动是正常现象

配置库和环境变量

打开刚才创建的build目录,里面有一个Debug目录,进入此目录,会有如下文件

在自己的第三方库目录下创建bin ;include;lib目录

将这三个文件放入lib目录下

将刚开始解压的protobuf-3.21.12目录下的src文件夹打开,google目录是我们需要的包含文件,将google目录拷贝进创建的include目录

接下来配置环境变量,这部分不细讲

打开PowerShell或者cmd,输入protoc –version查看版本

构建测试案例

建立一个测试案例

创建一个msg.proto文件

内容

syntax = "proto3";
message RequestMsg
{
    int32 cmdType = 1;
    bytes clientID = 2;
    bytes serverID = 3;
    string sign = 4;
    string data = 5;
}


message RespondMsg
{
    int32 status = 1;
    int32 seckeyID = 2;
    bytes clientID = 3;
    bytes serverID = 4;
    string data = 5;
}

保存并且退出,在proto文件的同目录下打开终端

输入protoc .\msg.proto –cpp_out=.

回车会在文件夹里得到pb.cc 和pb.h文件

打开vs创建新项目,把生成的msg.pb.cc和msg.pb.h文件添加进项目

创建main.cpp

必须创建,只编译cc和头文件一定会报错

#include <iostream>
#include <string>
#include "msg.pb.h"

using namespace std;

int main() {
    // 创建 RequestMsg 对象并设置字段
    RequestMsg requestMsg;
    requestMsg.set_cmdtype(1);
    requestMsg.set_clientid("client123");
    requestMsg.set_serverid("server456");
    requestMsg.set_sign("signature");
    requestMsg.set_data("Hello, this is a test message.");


    // 序列化 RequestMsg 到字符串
    string serializedRequest;
    if (!requestMsg.SerializeToString(&serializedRequest)) {
        cerr << "RequestMsg 序列化失败" << endl;
        return -1;
    }
    cout << "RequestMsg 序列化成功,字节长度:" << serializedRequest.size() << endl;



    // 反序列化 RequestMsg
    RequestMsg deserializedRequest;
    if (!deserializedRequest.ParseFromString(serializedRequest)) {
        cerr << "RequestMsg 反序列化失败" << endl;
        return -1;
    }
    cout << "RequestMsg 反序列化结果:" << endl;
    cout << "cmdType: " << deserializedRequest.cmdtype() << endl;
    cout << "clientID: " << deserializedRequest.clientid() << endl;
    cout << "serverID: " << deserializedRequest.serverid() << endl;
    cout << "sign: " << deserializedRequest.sign() << endl;
    cout << "data: " << deserializedRequest.data() << endl;



    // 创建 RespondMsg 对象并设置字段
    RespondMsg respondMsg;
    respondMsg.set_status(200);
    respondMsg.set_seckeyid(12345);
    respondMsg.set_clientid("client123");
    respondMsg.set_serverid("server456");
    respondMsg.set_data("Response data goes here.");

    // 序列化 RespondMsg 到字符串
    string serializedRespond;
    if (!respondMsg.SerializeToString(&serializedRespond)) {
        cerr << "RespondMsg 序列化失败" << endl;
        return -1;
    }

    cout << "RespondMsg 序列化成功,字节长度:" << serializedRespond.size() << endl;



    // 反序列化 RespondMsg
    RespondMsg deserializedRespond;
    if (!deserializedRespond.ParseFromString(serializedRespond)) {
        cerr << "RespondMsg 反序列化失败" << endl;
        return -1;
    }

    cout << "RespondMsg 反序列化结果:" << endl;
    cout << "status: " << deserializedRespond.status() << endl;
    cout << "seckeyID: " << deserializedRespond.seckeyid() << endl;
    cout << "clientID: " << deserializedRespond.clientid() << endl;
    cout << "serverID: " << deserializedRespond.serverid() << endl;
    cout << "data: " << deserializedRespond.data() << endl;


    // 关闭 Protobuf 库
    google::protobuf::ShutdownProtobufLibrary();

    return 0;

}

接下来配置vs项目环境

预处理器定义加入

_SCL_SECURE_NO_WARNINGS

_PROTOBUF_USE_DLLS

libprotobufd.lib

libprotobuf-lited.lib

libprotocd.lib

文件大量报错不用管,只要不是include报错就行,同时在头文件加入

#define PROTOBUF_USE_DLLS

执行项目得到以下

环境配置成功

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值