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

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

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

以下是详细的步骤说明:


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

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

步骤:

  1. 更新包列表

    bash 复制代码
    sudo apt update
  2. 安装 Protobuf 编译器和开发库

    bash 复制代码
    sudo apt install -y protobuf-compiler libprotobuf-dev
  3. 验证安装

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

    bash 复制代码
    protoc --version

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

    复制代码
    libprotoc 3.x.x

注意事项:

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

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

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

步骤:

  1. 安装必要的依赖

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

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

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

    bash 复制代码
    wget https://github.com/protocolbuffers/protobuf/releases/download/v21.0/protobuf-all-21.0.tar.gz

    解压下载的文件:

    bash 复制代码
    tar -xzvf protobuf-all-21.0.tar.gz
    cd protobuf-21.0
  3. 编译和安装 Protobuf

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

    bash 复制代码
    ./configure
    make
    make check
    sudo make install
    sudo ldconfig  # 更新共享库缓存

    说明:

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

    检查 protoc 版本:

    bash 复制代码
    protoc --version

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

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

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

    bash 复制代码
    echo 'export PATH=/usr/local/bin:$PATH' >> ~/.bashrc
    source ~/.bashrc

注意事项:

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

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


使用 Protobuf 的 C++ 库

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

  1. 编写 .proto 文件

    例如,创建 example.proto

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

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

    bash 复制代码
    protoc --cpp_out=. example.proto

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

  3. 在 C++ 项目中使用

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

    cpp 复制代码
    #include <iostream>
    #include "example.pb.h"
    
    int main() {
      Person person;
      person.set_name("Alice");
      person.set_id(123);
      person.set_email("[email protected]");
    
      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 库:

    bash 复制代码
    g++ main.cpp example.pb.cc -lprotobuf -o main
  5. 运行程序

    bash 复制代码
    ./main

    输出应为:

    复制代码
    Name: Alice
    ID: 123
    Email: [email protected]

相关推荐
小麦嵌入式17 分钟前
Linux驱动开发实战(十一):GPIO子系统深度解析与RGB LED驱动实践
linux·c语言·驱动开发·stm32·嵌入式硬件·物联网·ubuntu
刘若水19 分钟前
Linux: 进程信号初识
linux·运维·服务器
云 无 心 以 出 岫1 小时前
贪心算法QwQ
数据结构·c++·算法·贪心算法
换一颗红豆1 小时前
【C++ 多态】—— 礼器九鼎,釉下乾坤,多态中的 “风水寻龙诀“
c++
随便昵称2 小时前
蓝桥杯专项复习——前缀和和差分
c++·算法·前缀和·蓝桥杯
commonbelive2 小时前
团体程序设计天梯赛——L1-100 四项全能
c++
genispan2 小时前
QT/C++ 多线程并发下载实践
开发语言·c++·qt
共享家95272 小时前
深入剖析Linux常用命令,助力高效操作
linux·运维·服务器
小卡皮巴拉3 小时前
【力扣刷题实战】矩阵区域和
开发语言·c++·算法·leetcode·前缀和·矩阵
Pacify_The_North3 小时前
【C++进阶三】vector深度剖析(迭代器失效和深浅拷贝)
开发语言·c++·windows·visualstudio