Openssl数据安全传输平台003:Protobuf - 部署
文章目录
- Github代码仓库位置
- 一、Windows环境配置
- 生成库文件之后—>参考3.3 配置VS
- 1. 先将平台设置为所有平台
- 2. 配置属性 >> C/C++ >> 常规 >> 附加包含目录
- 3. 配置属性 >> C/C++ >> 预处理器 >> 预处理器定义,添加
- 4. 配置属性 >> C/C++ >> 代码生成 >> 运行库 ,选择:`多线程调试(/Mtd)`(根据自己的)
- 5. 配置属性 >> 链接器 >> 常规 >> 附加库目录, 添加
- 6. 配置属性 >> 链接器 >> 输入 >> 附加依赖项, 添加
- 二、Linux Centos环境配置
- 三、Wnidows环境下protobuf测试
- 3.1 新建.proto文件生成相应的类
- 3.2 .proto生成相应的类的使用
- 3.3 配置VS
- 1. 先将平台设置为所有平台
- 2. 配置属性 >> C/C++ >> 常规 >> 附加包含目录
- 3. 配置属性 >> C/C++ >> 预处理器 >> 预处理器定义,添加
- 4. 配置属性 >> C/C++ >> 代码生成 >> 运行库 ,选择:`多线程调试(/Mtd)`
- 5. 配置属性 >> 链接器 >> 常规 >> 附加库目录, 添加
- 6. 配置属性 >> 链接器 >> 输入 >> 附加依赖项, 添加
- 3.4 test代码
Github代码仓库位置
https://github.com/Chufeng-Jiang/OpenSSL_Secure_Data_Transmission_Platform/tree/main/Protobuf
一、Windows环境配置
在windows下配置,无论protobuf是什么版本,IDE和编译器的版本都要保持一致。
比如,protobuf的cpp使用在cmake生成工程的时候选择了对应的IDE及A编译器,就应该在同样使用A编译器的及对应版本的IDE上运行,否则容易报错。
我使用cmake3.27,因为cmake3.27在configure的时候有vs2022的选项,但是别的版本不一定有vs2022。在使用cmake3.27对protobuf3.17源文件生成工程后,对应的输出文件夹下会生成vs的sln文件,再使用对应版本的vs2022进行编译,生成protoc执行文件和库文件。
这里面有一个坑,在vs2022进行编译的时候,如果使用debug对protobuf-cpp工程进行编译生成库文件,那么后期在使用库文件时候,就要在对应的工程上指定相应的运行库和附加依赖项目。
配置环境:
操作系统:windows10
Visual Studio:vs2022社区版
Cmake版本:cmake3.27.7
Protobuf版本:protobuf3.17和对应的cpp文件包
具体的安装过程可以参考以下视频,大概半个小时就弄好了。
protobuf的安装:版本protobuf3.17+cmake+vs2022
生成库文件之后—>参考3.3 配置VS
在工程中添加编译好的类文件

接下来的步骤比较关键
1. 先将平台设置为所有平台

2. 配置属性 >> C/C++ >> 常规 >> 附加包含目录
选择google文件夹所在的目录,应该是下载的protobuf对应版本下的src文件夹(包含google文件),也可以把google文件夹单独拿出来新建include文件夹,我的是:
D:\ProgramData\protobuf\protobuf-3.17.2\src

3. 配置属性 >> C/C++ >> 预处理器 >> 预处理器定义,添加
_CONSOLE;
_SCL_SECURE_NO_WARNINGS;
_PROTOBUF_USE_DLLS
4. 配置属性 >> C/C++ >> 代码生成 >> 运行库 ,选择:多线程调试(/Mtd)(根据自己的)
在使用Visual Studio链接依赖库时,经常性的会出现下面几种错误
error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MT_StaticRelease”不匹配值“MTd_StaticDebug” error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MT_StaticRelease”不匹配值“MD_DynamicRelease”
列表中的第一个错误是静态库的Release、Debug版本引起的,只需要知道对应的库是Release、还是Debug做相应的修改就行;
列表中的第二个错误是要引用的是静态库,但是配置成动态库导致的,只需要修改成”多线程(/Mtd)“就可。
别的报错还可以参考,或者排列组合都试试
error LNK2038: 检测到“RuntimeLibrary”的不匹配项
5. 配置属性 >> 链接器 >> 常规 >> 附加库目录, 添加
这里添加的是protobuf生成的动态库的目录
D:\ProgramData\protobuf\build\Debug
6. 配置属性 >> 链接器 >> 输入 >> 附加依赖项, 添加
*d.lib是在Debug模式下生成的库文件
libprotobufd.lib;
libprotocd.lib
二、Linux Centos环境配置
1、下载必要的编译环境
sudo yum install autoconf automake libtool curl make gcc-c++ unzip
2、下载安装包并发送到Linux服务器上新建的protobuf文件夹
3、解压缩并将整个文件夹移动到系统目录下
sudo mv -f protobuf /usr/local/
4、修改环境变量
sudo vim /etc/profile
# 添加内容如下:
#(动态库搜索路径) 程序加载运行间查找动态链接库时指定除了系统默认路径之外的其他路径
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/protobuf/lib/
#(静态库搜索路径) 程序编译期间查找动态链接库时指定查找共享库的路径
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/protobuf/lib/
#执行程序搜索路径
export PATH=$PATH:/usr/local/protobuf/bin/
#c程序头文件搜索路径
export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/local/protobuf/include/
#c++程序头文件搜索路径
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/local/protobuf/include/
5、验证安装
protoc --version

三、Wnidows环境下protobuf测试
假设要序列化的数据为
// 要序列化的数据
struct Persion
{int id;string name;string sex; // man womanint age;
};
3.1 新建.proto文件生成相应的类
syntax = "proto3";message Persion
{int32 id = 1; // 编号从1开始repeated bytes name = 2;string sex = 3;int32 age = 4;
}
新建.proto文件
syntax = "proto3";message Persion
{int32 id = 1; // 编号从1开始repeated bytes name = 2;string sex = 3;int32 age = 4;
}
打开终端输入命令,自动生成相应的类,可以直接放到工程中用
protoc Persion.proto --cpp_out=./

3.2 .proto生成相应的类的使用
创建一个空项目,把上面生成的类放到工程文件下并添加现有项

3.3 配置VS
在工程中添加编译好的类文件

接下来的步骤比较关键
1. 先将平台设置为所有平台

2. 配置属性 >> C/C++ >> 常规 >> 附加包含目录
选择google文件夹所在的目录,应该是下载的protobuf对应版本下的src文件夹,也可以单独拿出来,我的是:
D:\ProgramData\protobuf\protobuf-3.17.2\src
3. 配置属性 >> C/C++ >> 预处理器 >> 预处理器定义,添加
_CONSOLE;
_SCL_SECURE_NO_WARNINGS;
_PROTOBUF_USE_DLLS
4. 配置属性 >> C/C++ >> 代码生成 >> 运行库 ,选择:多线程调试(/Mtd)
5. 配置属性 >> 链接器 >> 常规 >> 附加库目录, 添加
这里添加的是protobuf生成的动态库的目录
D:\ProgramData\protobuf\build\Debug
6. 配置属性 >> 链接器 >> 输入 >> 附加依赖项, 添加
*d.lib是在Debug模式下生成的库文件
libprotobufd.lib;
libprotocd.lib
3.4 test代码
#include <iostream>
#include "Persion.pb.h"
using namespace std;
/*message Persion{int32 id = 1; // 编号从1开始string name = 2;string sex = 3;int32 age = 4;}
*/
int main()
{// 1. 创建persion对象, 并初始化Persion p;p.set_id(1001);// 申请一块内存, 存储名字p.add_name();p.set_name(0, "路飞");p.set_sex("man");p.set_age(17);// 2. 将persion对象序列化 -> 字符串string output;p.SerializeToString(&output);cout << "序列化后的数据: " << output << endl;// 3. 数据传输// 4. 接收数据, 解析(output) -> 解码 -> 原始数据// 4.1 创建Persion对象Persion pp;pp.ParseFromString(output);// 将Info对象值取出// 5. 处理原始数据 -> 打印数据信息cout << "id: " << pp.id() << ", name: "<< pp.name(0) << ", "<< ", sex: " << pp.sex() << ", age: " << pp.age()<< endl;return 0;
}
相关文章:
Openssl数据安全传输平台003:Protobuf - 部署
文章目录 Github代码仓库位置一、Windows环境配置生成库文件之后—>参考3.3 配置VS1. 先将平台设置为所有平台2. 配置属性 >> C/C >> 常规 >> 附加包含目录3. 配置属性 >> C/C >> 预处理器 >> 预处理器定义,添加4. 配置属性 >> C…...
Proteus仿真--一种智能频率计的设计与制作(AVR单片机+proteus仿真)
本文介绍一种基于AVR单片机实现的一种智能频率计Proteus仿真实现(完整仿真源文件及代码见文末链接) 简介 硬件电路主要分为单片机主控模块、频率计模块、LCD1602液晶显示模块以及串口模块 (1)单片机主控模块:单片机…...
CAS是“Compare and Swap“(比较并交换)
CAS是"Compare and Swap"(比较并交换) 一,介绍 CAS是"Compare and Swap"(比较并交换)的缩写,是一种多线程同步的原子操作。它基于硬件的原子性保证,用于解决并发环境下的…...
前端数据可视化之【series、series饼图配置】配置项
目录 🌟Echarts配置项🌟series🌟饼图 type:pie🌟写在最后 🌟Echarts配置项 ECharts开源来自百度商业前端数据可视化团队,基于html5 Canvas,是一个纯Javascript图表库,提供直观&…...
03.MySQL事务及存储引擎笔记
事务 查看/设置事务 select autocommit; --查看当前数据库的事务状态,1表示开启,0表示关闭 set autocommit 0; --关闭自动事务提交采用关闭自动事务提交我们就可以手动进行事务提交,但是这种设置方式是对整个数据库起作用,一些可…...
input框输入中文时,输入未完成触发事件。Vue中文输入法不触发input事件?
前言 在做搜索输入框时,产品期待实时搜索,就是边输入边搜索,然而对于中文输入法出现的效果,不同的产品可能有不同的意见,有的觉得输入未完成也应该触发搜索。但有的却认为应该在中文输入完成后再触发搜索。我发现在vu…...
ArmSoM-RK3588编解码之mpp解码demo解析:mpi_dec_test
1. 简介 [RK3588从入门到精通] 专栏总目录 mpi_dec_test 是rockchip官方解码 demo 本篇文章进行mpi_dec_test 的代码解析,解码流程解析 2. 环境介绍 硬件环境: ArmSoM-W3 RK3588开发板 软件版本: OS:ArmSoM-W3 Debian11 3.…...
v-for列表渲染
一、v-for迭代数组 <li v-for"(e,index) in emp" :key"e.id">编号{{index1}} 名字{{e.name}} 年龄{{e.age}} </li> e 是循环数组中的每个元素的别名index 是当前循环的下表,从0开始:key 的作用: 是为了给 Vue 一个提示…...
【引流技术】最新头条全自动引流脚本,解放双手自动引流【引流脚本+技术教程】
软件功能: 评论点赞 适用于自己做头条号,去别人评论区截留,点赞,别人会收到提醒,达到回访效果 文章/视频评论 可以自己发布引流文章或视频,引导进你主页或者私信你,达到引流效果 设备需求: 安卓手机8.1及以上系统 文章分享者:Linxiaoyu…...
智能PDU的“智能”体现在哪些方面?
智能PDU是一种用于管理和监控数据中心或其他设施中的电源分配设备,通过引入以太网络、语音服务等新颖的通讯手段,增加了传统机柜PDU插座所不能提供的智能管理控制模块和控制芯片,同时兼具电源分配和管理功能。智能PDU是当今现代化IDC数据中心…...
Flutter和SwiftUI比较
0.语言 SwiftUI 毫无疑问是Swift语言编写, 在2019年正式推出,目前最新是Swift 5.9 (2023年9月),由Apple公司维护和发行; 该编程语言发明人已离职Apple。 语言官网:https://developer.apple.com/swift/ 最好用Xcode编…...
使用ngrok内网穿透后,调用相关接口报ERR_NGROK_6024 异常
header增加:ngrok-skip-browser-warning:69420即可。如下图:...
举个栗子!Alteryx 技巧(6):从 API 中提取数据
你听说过从 API 中提取数据吗?API 是指应用编程接口,是计算机之间或计算机程序之间的连接,它是一种软件接口,让不同的软件进行信息共享。对于很多数据分析师来说,他们常常需要从 API 中提取数据,那么如何快…...
算法、语言混编、分布式锁与分布式ID、IO模型
一、算法初识 数据结构和算法是程序的基石。我们使用的所有数据类型就是一种数据结构(数据的组织形式),写的程序逻辑就是算法。 算法是指用来操作数据、解决程序问题的一组方法。 对于同一个问题,使用不同的算法,也…...
代码随想录 Day26 贪心 01 全集 LeetCode455 分发饼干 LeetCodeT346摆动序列 LeetCdoe T53 最大子数组和
前言:贪心无套路 本质: 局部最优去推导全局最优 两个极端 贪心算法的难度一般要么特别简单,要么特别困难,所以我们只能多见识多做题,记住无需数学证明,因为两道贪心基本上毫无关系,我们只需要去思考局部最优即可 贪心的小例子 比如有一堆钞票,你可以拿走十张&#x…...
【前端vue面试】TypeScript
目录 快速入门0、TypeScript简介1、TypeScript 开发环境搭建2、基本类型3、编译选项4、webpack5、Babel面向对象1、类(class)2、面向对象的特点3、接口(Interface)4、泛型(Generic)快速入门 0、TypeScript简介 TypeScript是JavaScript的超集。它对JS进行了扩展,向JS中引…...
vue-next-admin框架的认识
最近利用这个框架二开了一个后台管理系统,这里简单介绍一下,后续会进行框架的修改等文章 1:介绍 Vue-next-admin是一个基于Vue3和Element-Plus的后台管理系统框架。它提供了一套完整的、易于扩展的后台管理界面解决方案,可用于快…...
【2024秋招】2023-9-14 最右线下后端开发二面
1 OS 1.1 讲讲什么是虚拟内存,怎么实现的 虚拟内存是一种存储器管理能力,它使得一个应用程序似乎有更多的物理内存(RAM)可用,而实际上,系统使用了一部分硬盘空间来模拟额外的 RAM。通过使用虚拟内存&…...
LeetCode 2678. 老人的数目
【LetMeFly】2678.老人的数目 力扣题目链接:https://leetcode.cn/problems/number-of-senior-citizens/ 给你一个下标从 0 开始的字符串 details 。details 中每个元素都是一位乘客的信息,信息用长度为 15 的字符串表示,表示方式如下&#…...
java--三元运算符、运算符的优先级
1.三元运算符介绍 1.格式:条件表达式?值1:值2; 2.执行流程:首先计算关系表达式的值,如果值为true,返回值1,如果为false,返回值2 2.运算符优先级 1.在表达式中…...
从心所欲不逾矩:一种自感澄明的儒家工夫现象学——兼论“自我即自感”与儒家心性论的对话
从心所欲不逾矩:一种自感澄明的儒家工夫现象学——兼论“自我即自感”与儒家心性论的对话岐金兰摘要本文以“自我即自感”理论为现象学视域,对孔子“七十而从心所欲不逾矩”的生命境界进行创造性重诠。核心论点为:此境界并非道德规范的内化&a…...
【2026年阿里巴巴集团暑期实习- 4月8日-工程岗-第三题- 相邻等值对贡献和】(题目+思路+JavaC++Python解析+在线测试)
题目内容 给定一个长度为 $ n $ 的数组 $ {a_1, a_2, \dots, a_n} $。我们称一对下标 $ (i, j) $ 为相邻等值对,当且仅当 $ 1 \leq i < j \leq n ,,, a_i = a_j $,并且对于任意 $ k < i < j $,都有 $ a_k \neq a_i $。 对每一个相邻等值对 $ (i, j) $,定义其…...
d2s-editor:实现游戏存档可视化管理的开源工具解决方案
d2s-editor:实现游戏存档可视化管理的开源工具解决方案 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor d2s-editor是一款基于Vue.js开发的开源工具,专为游戏存档文件提供可视化编辑功能。作为一款轻量级W…...
树莓派4B学习笔记——IO通信篇(SPI)
文章目录SPI协议简介树莓派4B1.3寸OLED(SPI协议)1.3寸OLED简介接线图开启树莓派SPI接口wiringPiSPI库简介C语言实现(汉字、字符、数字、图片显示)Python实现总结树莓派4B入门学习笔记汇总SPI协议简介 SPI(Serial Peripheral inte…...
英伟达 Blackwell Ultra 正式量产:20 PFLOPS 单机柜算力
前言4月7日,英伟达正式宣布 Blackwell Ultra(GB300)量产出货。这条消息在技术圈炸开的速度,比很多人预期的快。简单说数字:单机柜 FP8 算力 20 PFLOPS,比 H100 提升约 8 倍,能效比提升 5 倍。这…...
跨境电商Shopify 的对接开发
在 2026 年的跨境电商环境中,Shopify 的对接开发已不再仅仅是“铺货”和“改模板”,而是向高度自动化(AI-Driven)、无头电商(Headless)以及全球本地化(Hyper-Localization)深度演进。…...
人力资源管理AI落地实操:从踩坑到跑通的完整路径
人力资源管理AI是指将人工智能技术深度应用于招聘、人事、绩效、薪酬等HR管理全流程的智能化解决方案。 2026年,AI已从”锦上添花”变为HR部门的核心生产力工具,能够将简历筛选时间从平均3天缩短到4小时,绩效面谈记录效率提升6倍,…...
Burpsuite之暴力破解+验证码识别 | 添柴不加火敢
springboot自动配置 自动配置了大量组件,配置信息可以在application.properties文件中修改。 当添加了特定的Starter POM后,springboot会根据类路径上的jar包来自动配置bean(比如:springboot发现类路径上的MyBatis相关类ÿ…...
CPU占用率过高排查步骤
CPU占用率过高排查指南:快速定位系统瓶颈 当电脑突然变卡、风扇狂转,很可能是CPU占用率过高导致的。这种情况不仅影响工作效率,还可能隐藏着病毒、软件冲突或硬件问题。本文将介绍一套系统化的排查步骤,帮助你快速定位问题根源。…...
GraalVM静态镜像内存成本失控?独家披露头部云厂商内部《GraalVM内存SLA白皮书》核心指标与阈值管控模型(限阅72小时)
第一章:GraalVM静态镜像内存成本失控的真相与行业警讯GraalVM 静态原生镜像(Native Image)曾被广泛视为 Java 微服务“秒级启动”与“极致资源压缩”的终极方案。然而,大量生产实践揭示了一个被长期低估的反直觉现象:静…...
