当前位置: 首页 > news >正文

grpc 1.45.2 在ubuntu中的编译

要在 Ubuntu 上编译 gRPC 1.45.2,需要按照以下步骤操作。以下指南基于 gRPC 官方文档和相关资源,确保环境配置正确并成功编译。请确保你有管理员权限(sudo)以安装依赖项和执行相关命令。


1. 准备环境

确保你的 Ubuntu 系统已安装必要的工具和依赖项。以下是编译 gRPC 所需的工具:

bash

sudo apt update

sudo apt install -y build-essential autoconf libtool pkg-config cmake git

sudo apt install -y libssl-dev

此外,gRPC 依赖 Protocol Buffers(protobuf),需要安装 protobuf-compiler 和 libprotobuf-dev:

bash

sudo apt install -y protobuf-compiler libprotobuf-dev

2. 克隆 gRPC 仓库

gRPC 1.45.2 是一个较老的版本,因此需要从 GitHub 克隆指定版本的代码:

bash

git clone --recurse-submodules -b v1.45.2 --depth 1 --shallow-submodules https://github.com/grpc/grpc.git

cd grpc

  • --recurse-submodules:确保子模块(如 Protocol Buffers)被正确克隆。
  • -b v1.45.2:指定 gRPC 的 1.45.2 版本。
  • --depth 1 --shallow-submodules:减少克隆的数据量以加快下载。

3. 创建构建目录

在 gRPC 仓库目录中创建并进入构建目录:

bash

mkdir -p cmake/build

cd cmake/build

4. 配置 CMake

使用 CMake 配置 gRPC 的构建。以下是一个典型的配置命令,假设你希望将 gRPC 安装到自定义目录(例如 $HOME/grpc_install):

bash

cmake -DgRPC_INSTALL=ON \

-DgRPC_BUILD_TESTS=OFF \

-DCMAKE_CXX_STANDARD=17 \

-DCMAKE_INSTALL_PREFIX=$HOME/grpc_install \

../..

  • -DgRPC_INSTALL=ON:启用安装选项。
  • -DgRPC_BUILD_TESTS=OFF:禁用测试以加快构建。
  • -DCMAKE_CXX_STANDARD=17:设置 C++17 标准(gRPC 1.45.2 支持)。
  • -DCMAKE_INSTALL_PREFIX:指定安装目录(可根据需要修改)。

注意:如果希望使用系统安装的 Protocol Buffers,可以添加以下选项以避免编译 gRPC 内置的 protobuf:

bash

-DgRPC_PROTOBUF_PROVIDER=package \

-DgRPC_PROTOBUF_PACKAGE_TYPE=CONFIG \

-DProtobuf_ROOT=/usr

但需要确保系统安装的 Protocol Buffers 版本与 gRPC 1.45.2 兼容(建议使用 3.12.x 或更高版本)。否则,建议使用 gRPC 仓库中自带的 Protocol Buffers 子模块。

5. 编译 gRPC

运行以下命令进行编译:

bash

make -j$(nproc)

  • -j$(nproc):利用所有 CPU 核心加速编译。

编译可能需要几分钟,具体时间取决于你的硬件性能。

6. 安装 gRPC

编译完成后,安装 gRPC 到指定目录:

bash

make install

这会将 gRPC 的库、头文件和工具安装到 CMAKE_INSTALL_PREFIX 指定的目录(例如 $HOME/grpc_install)。

7. 验证安装

验证 gRPC 是否成功安装:

bash

# 检查 protoc 插件

$HOME/grpc_install/bin/grpc_cpp_plugin --version

如果输出类似 libprotoc 3.x.x,说明安装成功。

8. 环境变量配置

为了让系统找到 gRPC 的库和工具,需要将安装目录添加到环境变量:

bash

export PATH=$PATH:$HOME/grpc_install/bin

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/grpc_install/lib

可以将上述命令添加到 ~/.bashrc 或 ~/.bash_profile 以永久生效:

bash

echo "export PATH=\$PATH:$HOME/grpc_install/bin" >> ~/.bashrc

echo "export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:$HOME/grpc_install/lib" >> ~/.bashrc

source ~/.bashrc

9. 常见问题及解决方法

  • 问题 1:CMake 找不到 Protocol Buffers。
    • 确保已安装 libprotobuf-dev 和 protobuf-compiler。
    • 如果使用系统 protobuf,确保版本兼容,或者移除 -DgRPC_PROTOBUF_PROVIDER=package 让 gRPC 使用内置的 protobuf 子模块。
    • 如果仍失败,可尝试手动安装 Protocol Buffers 3.12.x:

      bash

      wget https://github.com/protocolbuffers/protobuf/releases/download/v3.12.4/protoc-3.12.4-linux-x86_64.zip

      sudo unzip -o protoc-3.12.4-linux-x86_64.zip -d /usr/local bin/protoc

      sudo unzip -o protoc-3.12.4-linux-x86_64.zip -d /usr/local 'include/*'

  • 问题 2:编译失败,提示缺少依赖。
    • 检查是否遗漏了 libssl-dev 或其他依赖。
    • 运行 sudo ldconfig 确保系统使用最新的库版本。
    •  
  • 问题 3:CMake 报错缺少 .cmake 文件。
    • 确保 git clone 时使用了 --recurse-submodules,否则子模块可能缺失。
    • 如果仍然失败,尝试使用 Bazel 构建(参考 gRPC 官方 BUILDING.md)。

10. 测试 gRPC

可以运行 gRPC 提供的示例来验证编译结果:

bash

cd ~/grpc/examples/cpp/helloworld

make

./greeter_server &

./greeter_client

如果客户端成功输出类似 Greeter received: Hello world,说明 gRPC 已正确编译和运行。


参考资源

  • gRPC 官方 C++ 快速入门:Quick start | C++ | gRPC
  • Protocol Buffers 安装指南:Protocol Buffers Documentation
  • Ubuntu 安装 protobuf 讨论:https://askubuntu.com/questions/1065971/how-can-i-install-protoc-on-ubuntu-16-04

http://www.lryc.cn/news/626453.html

相关文章:

  • 【软考架构】软件工程:软件项目管理
  • 氢元素:宇宙基石与未来能源之钥的多维探索
  • HTML <meta name=“color-scheme“>:自动适配系统深色 / 浅色模式
  • 简笔成画:让AI绘画变得简单而有趣
  • 基于隐函数定理的偏导数计算及其C++实现
  • Vue3 学习教程,从入门到精通,基于 Vue 3 + Element Plus + ECharts + JavaScript 开发图书销售网站(42)
  • K8S-Ingress资源对象
  • Linux-文本搜索工具grep
  • Nginx 负载均衡和缓存配置
  • 栈的概念(韦东山学习笔记)
  • java17学习笔记-switch总结
  • 服务器硬盘进行分区和挂载
  • 《CDN加速的安全隐患与解决办法:如何构建更安全的网络加速体系》
  • CSDN技术探讨:GEO(生成式引擎优化)如何助力品牌在AI搜索中脱颖而出
  • 有向图(Directed Graph)和有向无环图(Directed Acyclic Graph,DAG)代码实践
  • mRNA 的修饰方式有哪些?它们分别作用于哪些位置?
  • strncpy 函数使用及其模拟实现
  • 医疗AI与医院数据仓库的智能化升级:异构采集、精准评估与高效交互的融合方向(上)
  • Model Context Protocol (MCP) - 尝试创建和使用一下MCP Client
  • 软件测试:如何利用Burp Suite进行高效WEB安全测试
  • 制造业原料仓储混乱?WMS 系统实现物料精准溯源,生产更顺畅_
  • Java 14 新特性及具体应用
  • Spring Boot Controller 使用 @RequestBody + @ModelAttribute 接收请求
  • 应急响应-模拟服务器挂马后的应急相关操作
  • K8S-Pod资源对象
  • Spring Retry实战指南_让你的应用更具韧性
  • 服务器内存使用buff/cache的原理
  • k8s笔记01
  • 自建开发工具IDE(一)之拖找排版—仙盟创梦IDE
  • 跨域问题解决方法