在 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]

相关推荐
waving-black1 分钟前
利用frp和腾讯云服务器将内网暴露至外网(内网穿透)
linux·服务器·腾讯云·frp·内网穿透
stormsha13 分钟前
Linux中su与sudo命令的区别:权限管理的关键差异解析
linux·运维·服务器·鸿蒙系统·ux·batch命令
KyollBM34 分钟前
【CF】Day75——CF (Div. 2) B (数学 + 贪心) + CF 882 (Div. 2) C (01Trie | 区间最大异或和)
c语言·c++·算法
feiyangqingyun1 小时前
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
c++·qt·udp·gb28181
CV点灯大师1 小时前
C++算法训练营 Day10 栈与队列(1)
c++·redis·算法
筏.k1 小时前
grep、wc 与管道符快速上手指南
linux
Johny_Zhao1 小时前
华为MAAS、阿里云PAI、亚马逊AWS SageMaker、微软Azure ML各大模型深度分析对比
linux·人工智能·ai·信息安全·云计算·系统运维
CodeOfCC1 小时前
c语言 封装跨平台线程头文件
linux·c语言·windows
科文小白狼1 小时前
Linux下VSCode开发环境配置(LSP)
linux·vscode·里氏替换原则·lsp
成工小白2 小时前
【C++ 】智能指针:内存管理的 “自动导航仪”
开发语言·c++·智能指针