国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Openssl數(shù)據(jù)安全傳輸平臺(tái)003:Protobuf-3.17.2的編譯-Windows:cmake+VS2022/ Centos7/8: make

這篇具有很好參考價(jià)值的文章主要介紹了Openssl數(shù)據(jù)安全傳輸平臺(tái)003:Protobuf-3.17.2的編譯-Windows:cmake+VS2022/ Centos7/8: make。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

0 代碼倉(cāng)庫(kù)及視頻

0.1 Github代碼倉(cāng)庫(kù)位置

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系統(tǒng)上的安裝:版本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系統(tǒng)上的安裝:版本protobuf3.17+cmake+vs2022

1 Windows環(huán)境配置

在windows下配置,無(wú)論protobuf是什么版本,IDE和編譯器的版本都要保持一致。

比如,protobuf的cpp使用在cmake生成工程的時(shí)候選擇了對(duì)應(yīng)的IDE及A編譯器,就應(yīng)該在同樣使用A編譯器的及對(duì)應(yīng)版本的IDE上運(yùn)行,否則容易報(bào)錯(cuò)。

我使用cmake3.27,因?yàn)閏make3.27在configure的時(shí)候有vs2022的選項(xiàng),但是別的版本不一定有vs2022。在使用cmake3.27對(duì)protobuf3.17.2源文件生成工程后,對(duì)應(yīng)的輸出文件夾下會(huì)生成vs的sln文件,再使用對(duì)應(yīng)版本的vs2022進(jìn)行編譯,生成protoc執(zhí)行文件和庫(kù)文件。

這里面有一個(gè)坑,在vs2022進(jìn)行編譯的時(shí)候,如果使用debug對(duì)protobuf-cpp工程進(jìn)行編譯生成庫(kù)文件,那么后期在使用庫(kù)文件時(shí)候,就要在對(duì)應(yīng)的工程上指定相應(yīng)的運(yùn)行庫(kù)和附加依賴項(xiàng)目,即“XXXd”版本。

1.1 配置環(huán)境:

操作系統(tǒng):windows10
Visual Studio:vs2022社區(qū)版
Cmake版本:cmake3.27.7
Protobuf版本:protobuf3.17.2和對(duì)應(yīng)的cpp文件包

1.2 安裝編譯

具體的安裝過程可以參考以下視頻,大概半個(gè)小時(shí)就弄好了。

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

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

Openssl數(shù)據(jù)安全傳輸平臺(tái)003:Protobuf-3.17.2的編譯-Windows:cmake+VS2022/ Centos7/8: make,數(shù)據(jù)安全傳輸基礎(chǔ)設(shè)置平臺(tái)項(xiàng)目,項(xiàng)目環(huán)境搭建相關(guān)問題,protobuf
選中Shared Libs,以后生成的就是靜態(tài)庫(kù)。

以Debug版本為例:

  • 我先勾選Shared Libs,生成了sln工程,在sln工程中編譯生成了靜態(tài)庫(kù);
  • 然后沒有勾選了Shared Libs,生成了sln工程,在sln工程中編譯生成了動(dòng)態(tài)庫(kù)。

Openssl數(shù)據(jù)安全傳輸平臺(tái)003:Protobuf-3.17.2的編譯-Windows:cmake+VS2022/ Centos7/8: make,數(shù)據(jù)安全傳輸基礎(chǔ)設(shè)置平臺(tái)項(xiàng)目,項(xiàng)目環(huán)境搭建相關(guān)問題,protobuf

1.3 配置VS

生成庫(kù)文件之后—>參考3.3 配置VS

2 Linux Centos環(huán)境配置

2.1 下載必要的編譯環(huán)境

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

2.2 下載Linux上用的壓縮包

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

Openssl數(shù)據(jù)安全傳輸平臺(tái)003:Protobuf-3.17.2的編譯-Windows:cmake+VS2022/ Centos7/8: make,數(shù)據(jù)安全傳輸基礎(chǔ)設(shè)置平臺(tái)項(xiàng)目,項(xiàng)目環(huán)境搭建相關(guān)問題,protobuf

2.2.1 將包發(fā)送到Linux服務(wù)器上并解壓縮

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

2.2.2 進(jìn)入到壓縮包所在的文件夾配置configure

這里我們是把protobuf安裝在了系統(tǒng)目錄下,因此使用的時(shí)候只有root用戶能使用protoc相關(guān)的命令和庫(kù)文件、頭文件。

如果是需要使用普通用戶對(duì)程序進(jìn)行編譯,需要在相應(yīng)的用戶目錄下配置protobuf環(huán)境。

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

這里我們?cè)谙到y(tǒng)下進(jìn)行配置:

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

Openssl數(shù)據(jù)安全傳輸平臺(tái)003:Protobuf-3.17.2的編譯-Windows:cmake+VS2022/ Centos7/8: make,數(shù)據(jù)安全傳輸基礎(chǔ)設(shè)置平臺(tái)項(xiàng)目,項(xiàng)目環(huán)境搭建相關(guān)問題,protobuf

2.2.3 運(yùn)行makefile文件

sudo make

Openssl數(shù)據(jù)安全傳輸平臺(tái)003:Protobuf-3.17.2的編譯-Windows:cmake+VS2022/ Centos7/8: make,數(shù)據(jù)安全傳輸基礎(chǔ)設(shè)置平臺(tái)項(xiàng)目,項(xiàng)目環(huán)境搭建相關(guān)問題,protobuf

----------漫長(zhǎng)的等待-----------

Openssl數(shù)據(jù)安全傳輸平臺(tái)003:Protobuf-3.17.2的編譯-Windows:cmake+VS2022/ Centos7/8: make,數(shù)據(jù)安全傳輸基礎(chǔ)設(shè)置平臺(tái)項(xiàng)目,項(xiàng)目環(huán)境搭建相關(guān)問題,protobuf

2.2.4 make install將文件安裝到2.2.2設(shè)置的目錄中

sudo make install

Openssl數(shù)據(jù)安全傳輸平臺(tái)003:Protobuf-3.17.2的編譯-Windows:cmake+VS2022/ Centos7/8: make,數(shù)據(jù)安全傳輸基礎(chǔ)設(shè)置平臺(tái)項(xiàng)目,項(xiàng)目環(huán)境搭建相關(guān)問題,protobuf很快就安裝好了
Openssl數(shù)據(jù)安全傳輸平臺(tái)003:Protobuf-3.17.2的編譯-Windows:cmake+VS2022/ Centos7/8: make,數(shù)據(jù)安全傳輸基礎(chǔ)設(shè)置平臺(tái)項(xiàng)目,項(xiàng)目環(huán)境搭建相關(guān)問題,protobuf

2.2.5 在2.2.2配置的目錄下就會(huì)有bin/lib/include,相關(guān)文件均配置好

Openssl數(shù)據(jù)安全傳輸平臺(tái)003:Protobuf-3.17.2的編譯-Windows:cmake+VS2022/ Centos7/8: make,數(shù)據(jù)安全傳輸基礎(chǔ)設(shè)置平臺(tái)項(xiàng)目,項(xiàng)目環(huán)境搭建相關(guān)問題,protobuf

2.3 修改環(huán)境變量

sudo vim /etc/profile
# 添加內(nèi)容如下:
#(動(dòng)態(tài)庫(kù)搜索路徑) 程序加載運(yùn)行間查找動(dòng)態(tài)鏈接庫(kù)時(shí)指定除了系統(tǒng)默認(rèn)路徑之外的其他路徑
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/protobuf/lib/
#(靜態(tài)庫(kù)搜索路徑) 程序編譯期間查找動(dòng)態(tài)鏈接庫(kù)時(shí)指定查找共享庫(kù)的路徑
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/protobuf/lib/
#執(zhí)行程序搜索路徑
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 驗(yàn)證安裝

protoc --version

source /etc/profile

Openssl數(shù)據(jù)安全傳輸平臺(tái)003:Protobuf-3.17.2的編譯-Windows:cmake+VS2022/ Centos7/8: make,數(shù)據(jù)安全傳輸基礎(chǔ)設(shè)置平臺(tái)項(xiàng)目,項(xiàng)目環(huán)境搭建相關(guān)問題,protobuf

Q:程序使用protobuf,編譯沒有問題,運(yùn)行時(shí)一到建立protobuf對(duì)象就崩潰

后來(lái)偶然看到以前正常使用的makefile文件中后面加了-lpthread,加上就好了。我自己的程序沒有用到多線程,應(yīng)該是protobuf3里面用到了。

2.5 編譯的時(shí)候要加上

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

三、Wnidows環(huán)境下protobuf測(cè)試

假設(shè)要序列化的數(shù)據(jù)為

// 要序列化的數(shù)據(jù)
struct Persion
{
    int id;
    string name;
    string sex;	// man woman
    int age;
};

3.1 新建.proto文件生成相應(yīng)的類

syntax = "proto3";

message Persion
{
    int32 id = 1;   // 編號(hào)從1開始
    repeated bytes name = 2;
    string sex = 3;
    int32 age = 4;
}

新建.proto文件

syntax = "proto3";

message Persion
{
    int32 id = 1;   // 編號(hào)從1開始
    repeated bytes name = 2;
    string sex = 3;
    int32 age = 4;
}

打開終端輸入命令,自動(dòng)生成相應(yīng)的類,可以直接放到工程中用

protoc Persion.proto --cpp_out=./

Openssl數(shù)據(jù)安全傳輸平臺(tái)003:Protobuf-3.17.2的編譯-Windows:cmake+VS2022/ Centos7/8: make,數(shù)據(jù)安全傳輸基礎(chǔ)設(shè)置平臺(tái)項(xiàng)目,項(xiàng)目環(huán)境搭建相關(guān)問題,protobuf

3.2 .proto生成相應(yīng)的類的使用

創(chuàng)建一個(gè)空項(xiàng)目,把上面生成的類放到工程文件下并添加現(xiàn)有項(xiàng)
Openssl數(shù)據(jù)安全傳輸平臺(tái)003:Protobuf-3.17.2的編譯-Windows:cmake+VS2022/ Centos7/8: make,數(shù)據(jù)安全傳輸基礎(chǔ)設(shè)置平臺(tái)項(xiàng)目,項(xiàng)目環(huán)境搭建相關(guān)問題,protobuf

3.3 配置VS

在工程中添加編譯好的類文件
Openssl數(shù)據(jù)安全傳輸平臺(tái)003:Protobuf-3.17.2的編譯-Windows:cmake+VS2022/ Centos7/8: make,數(shù)據(jù)安全傳輸基礎(chǔ)設(shè)置平臺(tái)項(xiàng)目,項(xiàng)目環(huán)境搭建相關(guān)問題,protobuf
接下來(lái)的步驟比較關(guān)鍵

1. 先將平臺(tái)設(shè)置為所有平臺(tái)

Openssl數(shù)據(jù)安全傳輸平臺(tái)003:Protobuf-3.17.2的編譯-Windows:cmake+VS2022/ Centos7/8: make,數(shù)據(jù)安全傳輸基礎(chǔ)設(shè)置平臺(tái)項(xiàng)目,項(xiàng)目環(huán)境搭建相關(guān)問題,protobuf

2. 配置屬性 >> C/C++ >> 常規(guī) >> 附加包含目錄

選擇google文件夾所在的目錄,應(yīng)該是下載的protobuf對(duì)應(yīng)版本下的src文件夾,也可以單獨(dú)拿出來(lái),我的是:

D:\ProgramData\protobuf\protobuf-3.17.2\src

3. 配置屬性 >> C/C++ >> 預(yù)處理器 >> 預(yù)處理器定義,添加

_CONSOLE;
_SCL_SECURE_NO_WARNINGS;
_PROTOBUF_USE_DLLS

4. 配置屬性 >> C/C++ >> 代碼生成 >> 運(yùn)行庫(kù) ,選擇:多線程調(diào)試(/Mtd)在使用Visual Studio鏈接依賴庫(kù)時(shí),經(jīng)常性的會(huì)出現(xiàn)下面幾種錯(cuò)誤

error LNK2038: 檢測(cè)到“RuntimeLibrary”的不匹配項(xiàng): 
      值“MT_StaticRelease”不匹配值“MTd_StaticDebug” 
      
error LNK2038: 檢測(cè)到“RuntimeLibrary”的不匹配項(xiàng): 
     值“MT_StaticRelease”不匹配值“MD_DynamicRelease”

列表中的第一個(gè)錯(cuò)誤是靜態(tài)庫(kù)的Release、Debug版本引起的,只需要知道對(duì)應(yīng)的庫(kù)是Release、還是Debug做相應(yīng)的修改就行;

列表中的第二個(gè)錯(cuò)誤是要引用的是靜態(tài)庫(kù),但是配置成動(dòng)態(tài)庫(kù)導(dǎo)致的,只需要修改成”多線程(/Mtd)“就可。

別的報(bào)錯(cuò)還可以參考,或者排列組合都試試
error LNK2038: 檢測(cè)到“RuntimeLibrary”的不匹配項(xiàng)

5. 配置屬性 >> 鏈接器 >> 常規(guī) >> 附加庫(kù)目錄, 添加

這里添加的是protobuf生成的動(dòng)態(tài)庫(kù)的目錄

D:\ProgramData\protobuf\build\Debug

6. 配置屬性 >> 鏈接器 >> 輸入 >> 附加依賴項(xiàng), 添加

*d.lib是在Debug模式下生成的庫(kù)文件文章來(lái)源地址http://www.zghlxwxcb.cn/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;   // 編號(hào)從1開始
	string name = 2;
	string sex = 3;
	int32 age = 4;
	}
*/
int main()
{
	// 1. 創(chuàng)建persion對(duì)象, 并初始化
	Persion p;
	p.set_id(1001);
	// 申請(qǐng)一塊內(nèi)存, 存儲(chǔ)名字
	p.add_name();
	p.set_name(0, "路飛");
	p.set_sex("man");
	p.set_age(17);


	// 2. 將persion對(duì)象序列化 -> 字符串
	string output;
	p.SerializeToString(&output);
	cout << "序列化后的數(shù)據(jù): " << output << endl;

	// 3. 數(shù)據(jù)傳輸

	// 4. 接收數(shù)據(jù), 解析(output) -> 解碼 -> 原始數(shù)據(jù)
	// 4.1 創(chuàng)建Persion對(duì)象
	Persion pp;
	pp.ParseFromString(output);

	// 將Info對(duì)象值取出

	// 5. 處理原始數(shù)據(jù) -> 打印數(shù)據(jù)信息
	cout << "id: " << pp.id() << ", name: "
		<< pp.name(0) << ", "
		<< ", sex: " << pp.sex() << ", age: " << pp.age()
		<< endl;
	return 0;
}

到了這里,關(guān)于Openssl數(shù)據(jù)安全傳輸平臺(tái)003:Protobuf-3.17.2的編譯-Windows:cmake+VS2022/ Centos7/8: make的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包