在 Ubuntu 中安装 C++ 版本的 Protocol Buffers

news2025/1/12 8:54:11

在 Ubuntu 中安装 C++ 版本的 Protocol Buffers(Protobuf)有两种主要方法:

  1. 通过 Ubuntu 的包管理器 apt 安装(适用于快速安装,版本可能较旧)
  2. 从源代码编译安装(适用于需要最新版本或自定义配置的情况)

以下是详细的步骤说明:


方法一:使用 apt 包管理器安装

这种方法简单快捷,适合大多数用户。如果不需要最新版本的 Protobuf,可以选择此方法。

步骤:

  1. 更新包列表

    sudo apt update
    
  2. 安装 Protobuf 编译器和开发库

    sudo apt install -y protobuf-compiler libprotobuf-dev
    
  3. 验证安装

    检查 protoc 版本以确认安装成功:

    protoc --version
    

    你应该看到类似如下的输出:

    libprotoc 3.x.x
    

注意事项:

  • Ubuntu 官方仓库中的 Protobuf 版本可能不是最新的。如果需要更新版本,请考虑从源代码编译安装。

方法二:从源代码编译安装(获取最新版本)

如果你需要 Protobuf 的最新功能或特性,建议从源代码编译安装。

步骤:

  1. 安装必要的依赖

    首先,确保系统中安装了编译所需的工具和库:

    sudo apt update
    sudo apt install -y autoconf automake libtool curl make g++ unzip
    
  2. 下载 Protobuf 源代码

    访问 Protobuf 的 GitHub 仓库 获取最新的发布版本,或使用以下命令下载特定版本(例如 21.0):

    wget https://github.com/protocolbuffers/protobuf/releases/download/v21.0/protobuf-all-21.0.tar.gz
    

    解压下载的文件:

    tar -xzvf protobuf-all-21.0.tar.gz
    cd protobuf-21.0
    
  3. 编译和安装 Protobuf

    执行以下命令进行编译和安装:

    ./configure
    make
    make check
    sudo make install
    sudo ldconfig  # 更新共享库缓存
    

    说明:

    • ./configure:配置编译选项。
    • make:编译源代码。
    • make check:运行测试确保编译正确。
    • sudo make install:安装编译好的库和工具。
    • sudo ldconfig:更新系统的共享库缓存,确保新安装的库被识别。
  4. 验证安装

    检查 protoc 版本:

    protoc --version
    

    输出应显示你安装的版本,例如:

    libprotoc 21.0
    
  5. 设置环境变量(如果需要)

    如果 protoc 命令未在 PATH 中,可能需要手动添加。例如,如果安装路径为 /usr/local/bin,确保该路径在 PATH 中:

    echo 'export PATH=/usr/local/bin:$PATH' >> ~/.bashrc
    source ~/.bashrc
    

注意事项:

  • 卸载旧版本(如果存在):如果之前通过 apt 安装过 Protobuf,建议先卸载以避免版本冲突:

    sudo apt remove -y protobuf-compiler libprotobuf-dev
    
  • 安装特定版本:确保下载与你项目需求匹配的 Protobuf 版本。


使用 Protobuf 的 C++ 库

安装 Protobuf 后,你可以在 C++ 项目中使用它。以下是一个简单的使用示例:

  1. 编写 .proto 文件

    例如,创建 example.proto

    syntax = "proto3";
    
    message Person {
      string name = 1;
      int32 id = 2;
      string email = 3;
    }
    
  2. 生成 C++ 代码

    使用 protoc 编译器生成相应的 C++ 文件:

    protoc --cpp_out=. example.proto
    

    这将生成 example.pb.hexample.pb.cc

  3. 在 C++ 项目中使用

    在你的 C++ 代码中包含生成的头文件,并链接 Protobuf 库。例如,main.cpp

    #include <iostream>
    #include "example.pb.h"
    
    int main() {
      Person person;
      person.set_name("Alice");
      person.set_id(123);
      person.set_email("alice@example.com");
    
      std::cout << "Name: " << person.name() << std::endl;
      std::cout << "ID: " << person.id() << std::endl;
      std::cout << "Email: " << person.email() << std::endl;
    
      return 0;
    }
    
  4. 编译项目

    使用 g++ 编译并链接 Protobuf 库:

    g++ main.cpp example.pb.cc -lprotobuf -o main
    
  5. 运行程序

    ./main
    

    输出应为:

    Name: Alice
    ID: 123
    Email: alice@example.com
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2275415.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

开放词汇检测新晋SOTA:地瓜机器人开源DOSOD实时检测算法

在计算机视觉领域&#xff0c;目标检测是一项关键技术&#xff0c;旨在识别图像或视频中感兴趣物体的位置与类别。传统的闭集检测长期占据主导地位&#xff0c;但近年来&#xff0c;开放词汇检测&#xff08;Open-Vocabulary Object Detection-OVOD 或者 Open-Set Object Detec…

Jupyter Notebook 安装PyTorch

1、判断当前环境 通过如下命令可以看出是Anaconda 环境 2、Anaconda 环境安装 PyTorch 2.1 要执行的命令 如果你使用的是 Anaconda 环境&#xff0c;可以使用以下命令来安装 PyTorch&#xff1a; conda install pytorch -c pytorch 2.2 执行遇到的问题&#xff1a;没有权…

如何将json字符串格式化

文章目录 如何对json字符串进行格式化显示hutool方案的示例和不足使用fastjson的方案 如何对json字符串进行格式化显示 将json字符串内容进行格式化的输出显示。本文介绍 hutool的方案和alibaba 的fastjson方案 hutool方案的示例和不足 引入依赖 <dependency><grou…

C#使用OpenTK绘制3D可拖动旋转图形三棱锥

接上篇,绘制着色矩形 C#使用OpenTK绘制一个着色矩形-CSDN博客 上一篇安装OpenTK.GLControl后,这里可以直接拖动控件GLControl 我们会发现GLControl继承于UserControl //// 摘要:// OpenGL-aware WinForms control. The WinForms designer will always call the default//…

【Git原理和使用】Git 分支管理(创建、切换、合并、删除、bug分支)

一、理解分支 我们可以把分支理解为一个分身&#xff0c;这个分身是与我们的主身是相互独立的&#xff0c;比如我们的主身在这个月学C&#xff0c;而分身在这个月学java&#xff0c;在一个月以后我们让分身与主身融合&#xff0c;这样主身在一个月内既学会了C&#xff0c;也学…

概率图模型01

机器学习中&#xff0c;线性回归、树、集成和概率图都属于典型的统计学习方法&#xff0c;概率图模型会更深入地体现出‘统计’两字 概率图模型的常见算法 概率图模型中的图 概率图模型如图主要分为两种&#xff0c;即贝叶斯网络和马尔可夫网络&#xff0c;有向图与无向图&…

解决WordPress出现Fatal error: Uncaught TypeError: ftp_nlist()致命问题

错误背景 WordPress版本&#xff1a;wordpress-6.6.2-zh_CN WooCommerce版本&#xff1a;woocommerce.9.5.1 WordPress在安装了WooCommerce插件后&#xff0c;安装的过程中没有问题&#xff0c;在安装完成后提示&#xff1a; 此站点遇到了致命错误&#xff0c;请查看您站点管理…

《HeadFirst设计模式》笔记(下)

11 代理模式 代理要做的就是控制和管理访问。 你的客户对象所做的就像是在做远程方法调用&#xff0c;但其实只是调用本地堆中的“代理”对象上的方法&#xff0c;再由代理处理所有网络通信的低层细节。 Java的RMI提供了客户辅助对象和服务辅助对象&#xff0c;为客户辅助对…

【Uniapp-Vue3】v-if条件渲染及v-show的选择对比

如果我们想让元素根据响应式变量的值进行显示或隐藏可以使用v-if或v-show 一、v-show 另一种控制显示的方法就是使用v-show&#xff0c;使用方法和v-if一样&#xff0c;为true显示&#xff0c;为false则不显示。 二、v-if v-if除了可以像v-show一样单独使用外&#xff0c;还…

【MySQL数据库】基础总结

目录 前言 一、概述 二、 SQL 1. SQL通用语法 2. SQL分类 3. DDL 3.1 数据库操作 3.2 表操作 4. DML 5. DQL 5.1 基础查询 5.2 条件查询 5.3 聚合函数 5.4 分组查询 5.5 排序查询 5.6 分页查询 6. DCL 6.1 管理用户 6.2 权限控制 三、数据类型 1. 数值类…

ubuntu/kali安装c-jwt-cracker

1.下载安装包 可以去GitHub下载解压&#xff0c;我这直接在kali克隆下来了。&#xff08;网络不好可能克隆不下来&#xff09; git clone https://github.com/brendan-rius/c-jwt-cracker.git 2.如果下载的压缩包就需要进行解压&#xff0c;克隆的直接进入目录就好了。 unzi…

H266/VVC 帧内预测中 ISP 技术

帧内子划分 ISP ISP 技术是在 JVET-2002-v3 提案中详细介绍其原理&#xff0c;在 VTM8 中完整展示算法。ISP是线基内预测&#xff08;LIP&#xff09;模式的更新版本&#xff0c;它改善了原始方法在编码增益和复杂度之间的权衡&#xff0c;ISP 算法的核心原理就是利用较近的像…

《拉依达的嵌入式\驱动面试宝典》—计算机网络篇(二)

《拉依达的嵌入式\驱动面试宝典》—计算机网络篇(二) 你好,我是拉依达。 感谢所有阅读关注我的同学支持,目前博客累计阅读 27w,关注1.5w人。其中博客《最全Linux驱动开发全流程详细解析(持续更新)-CSDN博客》已经是 Linux驱动 相关内容搜索的推荐首位,感谢大家支持。 《…

【2024年华为OD机试】 (A卷,100分)- 对称美学(Java JS PythonC/C++)

一、问题描述 题目描述 对称就是最大的美学&#xff0c;现有一道关于对称字符串的美学。已知&#xff1a; 第1个字符串&#xff1a;R第2个字符串&#xff1a;BR第3个字符串&#xff1a;RBBR第4个字符串&#xff1a;BRRBRBBR第5个字符串&#xff1a;RBBRBRRBBRRBRBBR 相信你…

c#集成npoi根据excel模板导出excel

NuGet中安装npoi 创建excel模板&#xff0c;替换其中的内容生成新的excel文件。 例子中主要写了这四种情况&#xff1a; 1、替换单个单元格内容&#xff1b; 2、替换横向多个单元格&#xff1b; 3、替换表格&#xff1b; 4、单元格中插入图片&#xff1b; using System.IO; …

【数据库系统概论】第5章 数据库完整性【!触发器】

目录 5.1数据库完整性概述 5.2 实体完整性 5.3 参照完整性 5.4 用户定义的完整性 属性上的约束 1. 列值非空&#xff08;NOT NULL&#xff09; 2. 列值唯一&#xff08;UNIQUE&#xff09; 3. 检查列值是否满足条件&#xff08;CHECK&#xff09; 元组上的约束 5.5 完…

一键部署Netdata系统无需公网IP轻松实现本地服务器的可视化监控

文章目录 前言1.关于Netdata2.本地部署Netdata3.使用Netdata4.cpolar内网穿透工具安装5.创建远程连接公网地址6.固定Netdata公网地址 &#x1f4a1; 推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。…

HBuilderX(uniapp)实现微信小程序获取用户头像、昵称、授权登录、获取用户手机号

前言&#xff1a;微信文档写的零零散散的&#xff0c;网上搜的教程&#xff0c;23年的教程还在教22年改版之前的东西&#xff0c;导致踩坑无数&#xff0c;所以自己写一下文档记录一下&#xff0c;帮助后来者&#xff0c;记录于2024.11.14 一.获取用户头像和昵称 首先阅读微信…

RabbitMQ基础(简单易懂)

什么是RabbitMQ&#xff1f; 它基于AMQP协议&#xff08;Advanced Message Queuing Protocol&#xff09;&#xff0c;一种为应用构建消息队列的标准协议。过程中&#xff0c;它提供了一些重要模块&#xff1a;为消息发送的Producer&#xff08;生产者&#xff09;&#xff0c…

【web靶场】之upload-labs专项训练(基于BUUCTF平台)

前言 该靶场&#xff0c;是通过平台BUUCTF在线评测中的靶场进行的&#xff0c;基于linux搭建的 当然若是想要该靶场&#xff0c;可以采用github上的醒目&#xff0c;点击后面文字即可访问c0ny1/upload-labs: 一个想帮你总结所有类型的上传漏洞的靶场 或者本人分享在网盘中&a…