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