IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> Linux下C++使用Protobuf的安装步骤(vscode) -> 正文阅读

[开发工具]Linux下C++使用Protobuf的安装步骤(vscode)

一,下载网站

Releases · protocolbuffers/protobuf · GitHub

选择cpp版本,上传到linux服务器的目录,我这里上传到/home/linyu/upload

这里下载的是 protobuf-cpp-3.21.3.tar.gz 。

二,安装

在/home/linyu/upload的目录下执行以下指令:

 tar -xzf protobuf-cpp-3.21.3.tar.gz 
?
 cd protobuf-3.21.3
 #把protobuf安装到自己指定的目录
 ./configure --prefix=/home/linyu/include/protobuf
?
 make 
?
 make check 
?
 make install 

三,配置环境变量

进入到自己的目录下/home/linyu/,执行vi profile,添加以下命令到最后一行,保存退出。

#配置protoc的环境变量
export PROTOC_HOME=/home/linyu/include/protobuf
export PATH=$PROTOC_HOME/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
#因为protobuf安装到自己指定的目录,所以要指定共享库的文件目录,避免到时候找不到
export LD_LIBRARY_PATH=/home/linyu/include/protobuf/lib:$LD_LIBRARY_PATH

执行source profile以后,再执行以下的命令,查看环境变量是否配置成功:

protoc --version

四,编写proto文件,编译

  1. 新建一个文件夹proto,用于保存.proto文件

mkdir proto
cd proto
2. 创建一个Person.proto文件
syntax ="proto2";
?
package linyu;
?
message Person{
 ?  optional string name=1;
 ?  optional int32 age=2;
 ?  enum Sex{
 ? ? ? ?MALE=0;
 ? ? ? ?FEMALE=1;
 ?  }
 ?  optional Sex sex=4;
}

3. 写一个编译脚本run.sh

proto_dir=./
 
proto_src=./src
 
#删掉生成文件,保证每次执行都是最新的
rm -rf src
 
#创建一个目录,用来保存pb.h pb.cc 让代码看起来更干净一些
mkdir src
 
#以c++的格式生成pb文件,*.pb.h *.pb.cc
protoc -I=$proto_dir --cpp_out=$proto_src $proto_dir/*.proto

执行脚本./run.sh,进入src目录。拷贝生成好的Person.pb.cc和Person.pb.h文件到等下要编写的程序main.cpp的同级目录下。

五,新建C++程序,使用生成好的proto文件

编写一个main.cpp

#include <iostream>
#include "Person.pb.h"
 
int main(int argc, char** argv)
{
 ? ?//创建一个Person结构
 ? ?linyu::Person person1;
 ? ?person1.set_age(25);
 ? ?person1.set_name("小宇");
?
 ? ?//将结构序列化成string
 ? ?std::string str = "";
 ? ?person1.SerializeToString(&str);
 ? ?std::cout << str << std::endl;
?
 ? ?//创建一个空结构,将person1的序列化结构(string)反序列化给person2实现值的传递
 ? ?linyu::Person person2;
 ? ?person2.ParseFromString(str);
 ? ?std::cout << person2.age() << " " << person2.name() << std::endl;
 ? ?return 0;
}

注:程序采用vscode连接上远程的linux服务器上编写C++程序。

以下两个文件需要修改一下,分别是c_cpp_properties.json和tasks.json

c_cpp_properties文件说明:

//该文件的修改主要是针对vscode不会报错,有提示等等
{
  "configurations": [
    {
      "name": "linux-gcc-x64",
      "includePath": [
        "${workspaceFolder}/**",
        "/home/linyu/include/",
        "./"
      ],
      "compilerPath": "/bin/gcc",
      "cStandard": "${default}",
      "cppStandard": "${default}",
      "intelliSenseMode": "linux-gcc-x64",
      "compilerArgs": [
        ""
      ]
    }
  ],
  "version": 4
}

tasks.json文件说明:

/*
"-I"指定包含的头文件目录
"-L"指令链接的库目录
"-l"指令链接的库名称
*/

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++ 生成活动文件",
            "command": "/bin/g++",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "main.cpp",
                "Person.pb.cc",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}",
                "-I",
                "/home/linyu/include",
                "-I",
                "/home/linyu/include/protobuf/include/",
                "-L",
                "/home/linyu/include/protobuf/lib/",
                "-lzmq",
                "-lpthread",
                "-lprotobuf"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "调试器生成的任务。"
        }
    ],
    "version": "2.0.0"
}

如果采用命令行编译,则输入一下命令:

g++ -g main.cpp Person.pb.cc -o /home/linyu/zmqTest/push/main -I /home/linyu/include -I /home/linyu/include/protobuf/include/ -L /home/linyu/include/protobuf/lib/ -lzmq -lpthread -lprotobuf

点击运行,查看结果。

思考:序列化成二进制的方式,以及如何从二进制反序列化对象结构?

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-08-06 11:04:10  更:2022-08-06 11:04:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 18:30:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计