当前位置: 首页 > news >正文

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仿真实现&#xff08;完整仿真源文件及代码见文末链接&#xff09; 简介 硬件电路主要分为单片机主控模块、频率计模块、LCD1602液晶显示模块以及串口模块 &#xff08;1&#xff09;单片机主控模块&#xff1a;单片机…...

CAS是“Compare and Swap“(比较并交换)

CAS是"Compare and Swap"&#xff08;比较并交换&#xff09; 一&#xff0c;介绍 CAS是"Compare and Swap"&#xff08;比较并交换&#xff09;的缩写&#xff0c;是一种多线程同步的原子操作。它基于硬件的原子性保证&#xff0c;用于解决并发环境下的…...

前端数据可视化之【series、series饼图配置】配置项

目录 &#x1f31f;Echarts配置项&#x1f31f;series&#x1f31f;饼图 type:pie&#x1f31f;写在最后 &#x1f31f;Echarts配置项 ECharts开源来自百度商业前端数据可视化团队&#xff0c;基于html5 Canvas&#xff0c;是一个纯Javascript图表库&#xff0c;提供直观&…...

03.MySQL事务及存储引擎笔记

事务 查看/设置事务 select autocommit; --查看当前数据库的事务状态&#xff0c;1表示开启&#xff0c;0表示关闭 set autocommit 0; --关闭自动事务提交采用关闭自动事务提交我们就可以手动进行事务提交&#xff0c;但是这种设置方式是对整个数据库起作用&#xff0c;一些可…...

input框输入中文时,输入未完成触发事件。Vue中文输入法不触发input事件?

前言 在做搜索输入框时&#xff0c;产品期待实时搜索&#xff0c;就是边输入边搜索&#xff0c;然而对于中文输入法出现的效果&#xff0c;不同的产品可能有不同的意见&#xff0c;有的觉得输入未完成也应该触发搜索。但有的却认为应该在中文输入完成后再触发搜索。我发现在vu…...

ArmSoM-RK3588编解码之mpp解码demo解析:mpi_dec_test

1. 简介 [RK3588从入门到精通] 专栏总目录 mpi_dec_test 是rockchip官方解码 demo 本篇文章进行mpi_dec_test 的代码解析&#xff0c;解码流程解析 2. 环境介绍 硬件环境&#xff1a; ArmSoM-W3 RK3588开发板 软件版本&#xff1a; OS&#xff1a;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 是当前循环的下表&#xff0c;从0开始:key 的作用&#xff1a; 是为了给 Vue 一个提示…...

【引流技术】最新头条全自动引流脚本,解放双手自动引流【引流脚本+技术教程】

软件功能&#xff1a; 评论点赞 适用于自己做头条号,去别人评论区截留,点赞,别人会收到提醒,达到回访效果 文章/视频评论 可以自己发布引流文章或视频,引导进你主页或者私信你,达到引流效果 设备需求&#xff1a; 安卓手机8.1及以上系统 文章分享者&#xff1a;Linxiaoyu…...

智能PDU的“智能”体现在哪些方面?

智能PDU是一种用于管理和监控数据中心或其他设施中的电源分配设备&#xff0c;通过引入以太网络、语音服务等新颖的通讯手段&#xff0c;增加了传统机柜PDU插座所不能提供的智能管理控制模块和控制芯片&#xff0c;同时兼具电源分配和管理功能。智能PDU是当今现代化IDC数据中心…...

Flutter和SwiftUI比较

0.语言 SwiftUI 毫无疑问是Swift语言编写&#xff0c; 在2019年正式推出&#xff0c;目前最新是Swift 5.9 (2023年9月)&#xff0c;由Apple公司维护和发行&#xff1b; 该编程语言发明人已离职Apple。 语言官网&#xff1a;https://developer.apple.com/swift/ 最好用Xcode编…...

使用ngrok内网穿透后,调用相关接口报ERR_NGROK_6024 异常

header增加&#xff1a;ngrok-skip-browser-warning:69420即可。如下图&#xff1a;...

举个栗子!Alteryx 技巧(6):从 API 中提取数据

你听说过从 API 中提取数据吗&#xff1f;API 是指应用编程接口&#xff0c;是计算机之间或计算机程序之间的连接&#xff0c;它是一种软件接口&#xff0c;让不同的软件进行信息共享。对于很多数据分析师来说&#xff0c;他们常常需要从 API 中提取数据&#xff0c;那么如何快…...

算法、语言混编、分布式锁与分布式ID、IO模型

一、算法初识 数据结构和算法是程序的基石。我们使用的所有数据类型就是一种数据结构&#xff08;数据的组织形式&#xff09;&#xff0c;写的程序逻辑就是算法。 算法是指用来操作数据、解决程序问题的一组方法。 对于同一个问题&#xff0c;使用不同的算法&#xff0c;也…...

代码随想录 Day26 贪心 01 全集 LeetCode455 分发饼干 LeetCodeT346摆动序列 LeetCdoe T53 最大子数组和

前言:贪心无套路 本质: 局部最优去推导全局最优 两个极端 贪心算法的难度一般要么特别简单,要么特别困难,所以我们只能多见识多做题,记住无需数学证明,因为两道贪心基本上毫无关系,我们只需要去思考局部最优即可 贪心的小例子 比如有一堆钞票&#xff0c;你可以拿走十张&#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框架的认识

最近利用这个框架二开了一个后台管理系统&#xff0c;这里简单介绍一下&#xff0c;后续会进行框架的修改等文章 1&#xff1a;介绍 Vue-next-admin是一个基于Vue3和Element-Plus的后台管理系统框架。它提供了一套完整的、易于扩展的后台管理界面解决方案&#xff0c;可用于快…...

【2024秋招】2023-9-14 最右线下后端开发二面

1 OS 1.1 讲讲什么是虚拟内存&#xff0c;怎么实现的 虚拟内存是一种存储器管理能力&#xff0c;它使得一个应用程序似乎有更多的物理内存&#xff08;RAM&#xff09;可用&#xff0c;而实际上&#xff0c;系统使用了一部分硬盘空间来模拟额外的 RAM。通过使用虚拟内存&…...

LeetCode 2678. 老人的数目

【LetMeFly】2678.老人的数目 力扣题目链接&#xff1a;https://leetcode.cn/problems/number-of-senior-citizens/ 给你一个下标从 0 开始的字符串 details 。details 中每个元素都是一位乘客的信息&#xff0c;信息用长度为 15 的字符串表示&#xff0c;表示方式如下&#…...

java--三元运算符、运算符的优先级

1.三元运算符介绍 1.格式&#xff1a;条件表达式&#xff1f;值1&#xff1a;值2&#xff1b; 2.执行流程&#xff1a;首先计算关系表达式的值&#xff0c;如果值为true&#xff0c;返回值1&#xff0c;如果为false&#xff0c;返回值2 2.运算符优先级 1.在表达式中&#xf…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...

代码规范和架构【立芯理论一】(2025.06.08)

1、代码规范的目标 代码简洁精炼、美观&#xff0c;可持续性好高效率高复用&#xff0c;可移植性好高内聚&#xff0c;低耦合没有冗余规范性&#xff0c;代码有规可循&#xff0c;可以看出自己当时的思考过程特殊排版&#xff0c;特殊语法&#xff0c;特殊指令&#xff0c;必须…...