You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在仅支持C++11的Ubuntu14.04环境编译无Abseil的gRPC++

解决Ubuntu 14.04下无Abseil依赖、C11兼容的gRPC编译问题

1. 锁定兼容的版本组合

不要随意替换第三方protobuf子模块,gRPC 1.46.7官方适配的protobuf版本为3.19.6,版本不匹配会引发API兼容问题。按以下步骤拉取并重置代码:

git clone --depth 1 --branch v1.46.7 https://github.com/grpc/grpc.git
cd grpc
git submodule update --init --recursive --depth 1
# 强制将protobuf子模块切换到指定版本
cd third_party/protobuf
git checkout v3.19.6
cd ../..

2. 显式禁用Abseil并强制C++11标准

gRPC 1.46.x默认会尝试启用Abseil,必须通过编译开关完全禁用,同时指定C++11标准。使用CMake编译时,执行以下命令:

mkdir -p cmake/build
cd cmake/build
cmake \
  -DCMAKE_CXX_STANDARD=11 \
  -DCMAKE_CXX_STANDARD_REQUIRED=ON \
  -DGRPC_ABSL_PROVIDER=none \
  -DGRPC_PROTOBUF_PROVIDER=module \
  -DGRPC_BUILD_TESTS=OFF \
  -DGRPC_BUILD_EXAMPLES=OFF \
  ../..
make -j$(nproc)

参数说明:

  • -DGRPC_ABSL_PROVIDER=none:彻底禁用Abseil依赖
  • -DCMAKE_CXX_STANDARD=11:强制编译器使用C++11
  • -DGRPC_PROTOBUF_PROVIDER=module:使用gRPC自带的protobuf子模块编译

3. 适配Ubuntu 14.04的gcc版本

Ubuntu 14.04默认gcc 4.8对部分C++11特性支持不完善,建议升级到gcc 5.x:

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install gcc-5 g++-5
# 临时设置默认编译器
export CC=gcc-5
export CXX=g++-5

设置完成后再执行上述CMake和编译命令。

4. 额外禁用C++14依赖组件

为避免编译时触发C++14特性,添加以下CMake参数进一步限制:

cmake \
  ...
  -DGRPC_BUILD_CSHARP_EXT=OFF \
  -DGRPC_BUILD_GRPC_CSHARP_PLUGIN=OFF \
  -DGRPC_BUILD_GRPC_NODE_PLUGIN=OFF \
  -DGRPC_BUILD_GRPC_OBJECTIVE_C_PLUGIN=OFF \
  -DGRPC_BUILD_GRPC_PHP_PLUGIN=OFF \
  -DGRPC_BUILD_GRPC_PYTHON_PLUGIN=OFF \
  -DGRPC_BUILD_GRPC_RUBY_PLUGIN=OFF \
  ../..

5. 验证编译结果

编译完成后,检查生成的库是否未链接Abseil:

ldd libgrpc++.so | grep absl

无输出则说明成功禁用Abseil依赖。

内容的提问来源于stack exchange,提问作者mdcraver

火山引擎 最新活动