You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Bazel构建GRPC时遇-Wdeprecated-enum-enum-conversion未知警告组错误

解决Bazel构建gRPC时clang不识别-Wdeprecated-enum-enum-conversion的问题

问题原因

你使用的clang 6.0.0版本过旧,-Wdeprecated-enum-enum-conversion这个警告选项是从clang 7.0开始支持的,而protobuf的port_def.inc文件中直接启用了该警告,导致老版本clang编译报错。

解决方案

方案1:升级clang到支持该选项的版本(推荐)

Ubuntu 18.04默认clang版本为6.0,可通过LLVM官方源安装更高版本:

  • 添加LLVM源:
    wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
    sudo add-apt-repository "deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-10 main"
    
  • 更新包列表并安装clang 10:
    sudo apt update
    sudo apt install clang-10 lldb-10 lld-10
    
  • 设置默认clang版本:
    sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-10 100
    sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-10 100
    
  • 验证版本:
    clang --version
    
    显示clang 10.x即可,之后重新执行bazel build :all。

方案2:临时修改protobuf的port_def.inc文件

找到构建目录下的external/com_google_protobuf/src/google/protobuf/port_def.inc文件,定位到第1009行的#pragma GCC diagnostic warning "-Wdeprecated-enum-enum-conversion",修改为带版本判断的指令:

#if __clang_major__ >= 7
#pragma GCC diagnostic warning "-Wdeprecated-enum-enum-conversion"
#endif

保存后重新执行构建。注意:该修改会在Bazel清理缓存或重新拉取依赖时被覆盖,仅适合临时测试。

方案3:通过Bazel参数强制禁用该警告

构建时直接传递编译选项,强制忽略这个警告:

bazel build :all --cxxopt="-Wno-deprecated-enum-enum-conversion"

如果老版本clang不识别-Wno-deprecated-enum-enum-conversion,可在项目根目录创建.bazelrc文件,添加以下内容忽略所有未知警告选项:

build:clang6 --cxxopt="-Wno-unknown-warning-option"
build --config=clang6

之后重新执行构建即可。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 17:42:40