Openssl数据安全传输平台003:Protobuf-3.17.2的编译-Windows:cmake+VS2022/ Centos7/8: make

这篇具有很好参考价值的文章主要介绍了Openssl数据安全传输平台003:Protobuf-3.17.2的编译-Windows:cmake+VS2022/ Centos7/8: make。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

0 代码仓库及视频

0.1 Github代码仓库位置

https://github.com/Chufeng-Jiang/OpenSSL_Secure_Data_Transmission_Platform/tree/main/Protobuf

0.2 视频

0.2.1 Centos7

https://www.bilibili.com/video/BV1we411R7sS/?vd_source=3353f83539e46042d8cf76efb177a8e4

06-Protobuf在Centos7系统上的安装:版本protobuf3.17.2

0.2.2 windows

https://www.bilibili.com/video/BV1rw411X7mY/?spm_id_from=333.999.0.0&vd_source=3353f83539e46042d8cf76efb177a8e4

05-Protobuf在Windows系统上的安装:版本protobuf3.17+cmake+vs2022

1 Windows环境配置

在windows下配置,无论protobuf是什么版本,IDE和编译器的版本都要保持一致。

比如,protobuf的cpp使用在cmake生成工程的时候选择了对应的IDE及A编译器,就应该在同样使用A编译器的及对应版本的IDE上运行,否则容易报错。

我使用cmake3.27,因为cmake3.27在configure的时候有vs2022的选项,但是别的版本不一定有vs2022。在使用cmake3.27对protobuf3.17.2源文件生成工程后,对应的输出文件夹下会生成vs的sln文件,再使用对应版本的vs2022进行编译,生成protoc执行文件和库文件。

这里面有一个坑,在vs2022进行编译的时候,如果使用debug对protobuf-cpp工程进行编译生成库文件,那么后期在使用库文件时候,就要在对应的工程上指定相应的运行库和附加依赖项目,即“XXXd”版本。

1.1 配置环境:

操作系统:windows10
Visual Studio:vs2022社区版
Cmake版本:cmake3.27.7
Protobuf版本:protobuf3.17.2和对应的cpp文件包

1.2 安装编译

具体的安装过程可以参考以下视频,大概半个小时就弄好了。

protobuf的安装:版本protobuf3.17.2+cmake+vs2022

  • https://www.bilibili.com/video/BV1rw411X7mY/

Openssl数据安全传输平台003:Protobuf-3.17.2的编译-Windows:cmake+VS2022/ Centos7/8: make,数据安全传输基础设置平台项目,项目环境搭建相关问题,protobuf
选中Shared Libs,以后生成的就是静态库。

以Debug版本为例:

  • 我先勾选Shared Libs,生成了sln工程,在sln工程中编译生成了静态库;
  • 然后没有勾选了Shared Libs,生成了sln工程,在sln工程中编译生成了动态库。

Openssl数据安全传输平台003:Protobuf-3.17.2的编译-Windows:cmake+VS2022/ Centos7/8: make,数据安全传输基础设置平台项目,项目环境搭建相关问题,protobuf

1.3 配置VS

生成库文件之后—>参考3.3 配置VS

2 Linux Centos环境配置

2.1 下载必要的编译环境

sudo yum install autoconf automake libtool curl make gcc-c++ unzip

2.2 下载Linux上用的压缩包

https://github.com/protocolbuffers/protobuf/releases?page=7

Openssl数据安全传输平台003:Protobuf-3.17.2的编译-Windows:cmake+VS2022/ Centos7/8: make,数据安全传输基础设置平台项目,项目环境搭建相关问题,protobuf

2.2.1 将包发送到Linux服务器上并解压缩

sudo tar -zxvf protobuf-all-3.17.2.tar.gz

2.2.2 进入到压缩包所在的文件夹配置configure

这里我们是把protobuf安装在了系统目录下,因此使用的时候只有root用户能使用protoc相关的命令和库文件、头文件。

如果是需要使用普通用户对程序进行编译,需要在相应的用户目录下配置protobuf环境。

sudo ./configure --prefix=/home/beza/protobuf

这里我们在系统下进行配置:

sudo ./configure --prefix=/usr/local/protobuf

Openssl数据安全传输平台003:Protobuf-3.17.2的编译-Windows:cmake+VS2022/ Centos7/8: make,数据安全传输基础设置平台项目,项目环境搭建相关问题,protobuf

2.2.3 运行makefile文件

sudo make

Openssl数据安全传输平台003:Protobuf-3.17.2的编译-Windows:cmake+VS2022/ Centos7/8: make,数据安全传输基础设置平台项目,项目环境搭建相关问题,protobuf

----------漫长的等待-----------

Openssl数据安全传输平台003:Protobuf-3.17.2的编译-Windows:cmake+VS2022/ Centos7/8: make,数据安全传输基础设置平台项目,项目环境搭建相关问题,protobuf

2.2.4 make install将文件安装到2.2.2设置的目录中

sudo make install

Openssl数据安全传输平台003:Protobuf-3.17.2的编译-Windows:cmake+VS2022/ Centos7/8: make,数据安全传输基础设置平台项目,项目环境搭建相关问题,protobuf很快就安装好了
Openssl数据安全传输平台003:Protobuf-3.17.2的编译-Windows:cmake+VS2022/ Centos7/8: make,数据安全传输基础设置平台项目,项目环境搭建相关问题,protobuf

2.2.5 在2.2.2配置的目录下就会有bin/lib/include,相关文件均配置好

Openssl数据安全传输平台003:Protobuf-3.17.2的编译-Windows:cmake+VS2022/ Centos7/8: make,数据安全传输基础设置平台项目,项目环境搭建相关问题,protobuf

2.3 修改环境变量

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/

2.4 验证安装

protoc --version

source /etc/profile

Openssl数据安全传输平台003:Protobuf-3.17.2的编译-Windows:cmake+VS2022/ Centos7/8: make,数据安全传输基础设置平台项目,项目环境搭建相关问题,protobuf

Q:程序使用protobuf,编译没有问题,运行时一到建立protobuf对象就崩溃

后来偶然看到以前正常使用的makefile文件中后面加了-lpthread,加上就好了。我自己的程序没有用到多线程,应该是protobuf3里面用到了。

2.5 编译的时候要加上

g++ XXX.cpp -L/usr/local/protobuf/include -lprotobuf 

三、Wnidows环境下protobuf测试

假设要序列化的数据为

// 要序列化的数据
struct Persion
{
    int id;
    string name;
    string sex;	// man woman
    int 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=./

Openssl数据安全传输平台003:Protobuf-3.17.2的编译-Windows:cmake+VS2022/ Centos7/8: make,数据安全传输基础设置平台项目,项目环境搭建相关问题,protobuf

3.2 .proto生成相应的类的使用

创建一个空项目,把上面生成的类放到工程文件下并添加现有项
Openssl数据安全传输平台003:Protobuf-3.17.2的编译-Windows:cmake+VS2022/ Centos7/8: make,数据安全传输基础设置平台项目,项目环境搭建相关问题,protobuf

3.3 配置VS

在工程中添加编译好的类文件
Openssl数据安全传输平台003:Protobuf-3.17.2的编译-Windows:cmake+VS2022/ Centos7/8: make,数据安全传输基础设置平台项目,项目环境搭建相关问题,protobuf
接下来的步骤比较关键

1. 先将平台设置为所有平台

Openssl数据安全传输平台003:Protobuf-3.17.2的编译-Windows:cmake+VS2022/ Centos7/8: make,数据安全传输基础设置平台项目,项目环境搭建相关问题,protobuf

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)在使用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模式下生成的库文件文章来源地址https://www.toymoban.com/news/detail-738359.html

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-3.17.2的编译-Windows:cmake+VS2022/ Centos7/8: make的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Openssl数据安全传输平台014:OCCI环境搭建和使用:Centos8-Oracle19c代码跑通 + Window代码没跑通(不影响本项目)

    https://www.bilibili.com/video/BV1eQ4y1H7CA/?vd_source=3353f83539e46042d8cf76efb177a8e4 10-Centos7环境下安装配置OCCI-12.2.0.1版本环境 Linux-CentOS8-Oracle19c 安装详解-含Navicate远程连接配置 Navicate远程连接Centos-Oracle19c:ORA-12541: TNS: no listener 无监听错误 - tcping 1521端口关闭 如何在windows下得到对应的occi的

    2024年02月08日
    浏览(39)
  • 如何通过安全数据传输平台,保护核心数据的安全传输?

    在数字化的浪潮中,企业的数据安全传输显得尤为关键。随着网络攻击手段的日益复杂,传统的数据传输方式已不再安全,这就需要我们重视并采取有效的措施,通过安全数据传输平台来保护核心数据。 传统的数据传输面临的主要问题包括: 1.网络带宽限制:企业的网络带宽

    2024年04月28日
    浏览(44)
  • Protobuf: 高效数据传输的秘密武器

    当涉及到网络通信和数据存储时, 数据序列化 一直都是一个重要的话题;特别是现在很多公司都在推行微服务,数据序列化更是重中之重,通常会选择使用 JSON 作为数据交换格式,且 JSON 已经成为业界的主流。但是 Google 这么大的公司使用的却是一种被称为 Protobuf 的数据交

    2024年02月03日
    浏览(45)
  • vue3项目使用WebSocket 传输 Protobuf 格式的数据

    前端和后端数据传输常用数据格式: JSON(JavaScript Object Notation):与 HTTP 协议和 REST API 配合使用时,JSON 数据是最常用的数据格式之一。对于 WebSocket,JSON 数据同样适用。客户端可以将消息转换为 JSON 对象,并将其发送到服务器进行处理,在服务器上生成响应并返回给客户端

    2024年02月10日
    浏览(52)
  • 【QT+QGIS跨平台编译】之三:【OpenSSL+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

    OpenSSL是一个开放源代码的软件库包,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连接者的身份。这个包广泛被应用在互联网的网页服务器上。 SSL是Secure Sockets Layer(安全套接层协议)的缩写,可以在Internet上提供秘密性传输。SSL能使用户/服务器应用

    2024年01月22日
    浏览(93)
  • iMazing 2.17 for Mac 破解版 ios苹果数据传输软件

    iMazing 2.17.17 for Mac是一款Mac平台上的手机管理软件,帮助用户管理iOS设备。相比iTunes,iMazing的功能更为强大,提供了更方便快捷的操作方式,设计人性化。通过iMazing,用户可以轻松浏览和管理备份,提取和打印文本信息,传输文件,以及复制、备份音乐、文件、应用和信息等

    2024年03月09日
    浏览(45)
  • Protobuf-net:C#高效序列化工具,助力接口传输与前端解析

      概述: Protobuf-net是C#中高效的二进制序列化工具,以紧凑、跨语言支持和卓越性能著称。通过定义消息类型、序列化和反序列化实现数据传输,并可适用于Web接口。前端可使用protobuf.js库解析Protobuf格式数据。 Protobuf-net(Protocol Buffers)是一种高效的二进制序列化工具,具有

    2024年03月09日
    浏览(40)
  • openssl3.2/test/certs - 003 - genroot “Root CA“ root-key2 root-cert2

    索引贴 = openssl3.2 - 官方demo学习 - test - certs // openssl3.2/test/certs - 003 - genroot “Root CA” root-key2 root-cert2 // -------------------------------------------------------------------------------- // 官方原始脚本 // -------------------------------------------------------------------------------- ./mkcert.sh genroot “Root CA” roo

    2024年01月23日
    浏览(44)
  • vs2019 中编译和使用 protobuf 库

    protobuf 是一种跨平台的序列化结构数据的方法,可用于网络数据传输及存储。 本文对使用 vs2019 编译 protobuf 库文件进行说明,相关代码及安装文件均来自官网下载。 ①.生成 sln 工程文件 打开 cmake ,然后选择 protobuf-v3.19.4 目录中的 cmake 文件夹 单击 configure 按钮,在打开界面

    2024年02月08日
    浏览(41)
  • 数据传输安全不达标:数据传输安全措施未达到行业标准

    引言 近年来随着信息技术的快速发展与普及应用, 企业、政府及个人的信息安全问题日益凸显出来; 其中数据安全是当前网络安全的焦点之一.本文针对数据传输安全问题进行分析并提出相应的解决方法来保障企业、个人等的数据安全性. 数据传输安全的定义和特点 **数据的完

    2024年02月02日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包