ZBLOG

make[2]: *** [third_party/abseil-cpp/absl/strings/CMakeFiles/str_format_internal.dir/build.make:104:third_party/abseil-cpp/absl/strings/CMakeFiles/str_format_internal.dir/internal/str_format/extension.cc.o] 错误 1 make[1]: *** [CMakeFiles/Makefile2:...

这个错误是 gRPC 编译过程中 Abseil 库构建失败 导致的,具体原因可能有多种。以下是逐步排查和解决方案:


1. 常见原因分析

(1) 编译器版本不兼容

  • 现象:Abseil/C++17+ 特性需要较新的编译器(如 GCC >= 7 或 Clang >= 5)。
  • 检查方法
    1. gcc --version
  • 解决:升级编译器(以 Ubuntu 为例):
    1. sudo apt install gcc-10 g++-10
    2. export CC=gcc-10 CXX=g++-10

(2) Protobuf/Abseil版本冲突

  • 背景:gRPC依赖的 Abseil/Protobuf可能与系统已安装版本冲突。
  • 解决
    1. 统一使用子模块版本(推荐):
      1. git submodule update --init --recursive
    2. 清除旧版本
      1. sudo apt remove libprotobuf-dev libabsl-dev # Ubuntu示例

(3) CMake/Ninja配置问题

  • 尝试生成时指定 Ninja(比 make 更稳定):
    1. mkdir -p cmake/build && cd cmake/build
    2. cmake -GNinja ../..
    3. ninja

2. Debug具体错误文件

从日志看,失败发生在 str_format_internal,可能是代码或编译选项问题:

  1. # (可选)单独编译Abseil测试问题是否复现
  2. cd third_party/abseil-cpp && mkdir build && cd build
  3. cmake .. && make str_format_internal -j4

3.环境隔离方案

如果问题仍存在,建议在纯净环境中编译:

(1) Docker方式

  1. docker run -it ubuntu:22.04 bash
  2. #容器内执行:
  3. apt update && apt install -y git cmake g++ autoconf libtool pkg-config
  4. git clone --recurse-submodules https://github.com/grpc/grpc.git
  5. cd grpc && mkdir -p cmake/build && cd cmake/build
  6. cmake ../.. && make -j$(nproc)

(2) Conda虚拟环境

”`bashconda create -n grpc_build python=3.8 conda activate grpc_build conda install -c conda-forge cmake ninja

  1. ---
  2. ### **4.手动绕过策略(应急)**
  3. 如果只需使用gRPC而非修改其代码,可直接安装预编译版本:
  4. ```bash
  5. #通过vcpkg安装(需先安装vcpkg)
  6. vcpkg install grpc:x64-linux
  7. #或使用官方二进制包(部分平台):
  8. export MY_INSTALL_DIR=$HOME/.local
  9. mkdir -p $MY_INSTALL_DIR
  10. echo 'export PATH="$MY_INSTALL_DIR/bin:$PATH"' >> ~/.bashrc
  11. source ~/.bashrc
  12. wget https://packages.grpc.io/archive/latest/grpc-v1.50.0-linux-x86_64.tar.gz
  13. tar -xzvf grpc-v1.50.0-linux-x86_64.tar.gz -C $MY_INSTALL_DIR

5.获取详细日志

重新编译时捕获完整错误信息:

  1. clean #清理旧构建
  2. make VERBOSE=1 #显示详细命令
将完整的终端输出提供给我可以进一步精准分析。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=23371

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?