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