美文网首页
gRPC编译- version `GLIBCXX_3.4.20&

gRPC编译- version `GLIBCXX_3.4.20&

作者: 汨罗在北方 | 来源:发表于2018-06-08 18:59 被阅读103次

在编译gRPC的过程中发现编译到最后弹出如下错误提示:

[PROTOC]  Generating protobuf CC file from src/proto/grpc/channelz/channelz.proto
[GRPC]    Generating gRPC's protobuf service CC file from src/proto/grpc/channelz/channelz.proto
/home/work/tools/grpc_1.11/bins/opt/grpc_cpp_plugin: /lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /home/work/tools/grpc_1.11/bins/opt/grpc_cpp_plugin)
/home/work/tools/grpc_1.11/bins/opt/grpc_cpp_plugin: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /home/work/tools/grpc_1.11/bins/opt/grpc_cpp_plugin)
--grpc_out: protoc-gen-grpc: Plugin failed with status code 1.
make: *** [/home/work/tools/grpc_1.11/gens/src/proto/grpc/channelz/channelz.grpc.pb.cc] Error 1

看到网上的解释大多都是让更新gcc版本的。由于公司统一开发机的gcc版本不方便升级,所以自己用了一天时间来查找这个问题到底是怎么引起的。最终却发现其实这样提示的原因是目前使用的编译指令和配置的libstdc++.so不一致造成的。

其实用时这么多的原因主要还是自己差错方向错误,一直以为是因为代码要求的版本太高导致本机gcc无法编译,尝试了多次降版本编译后发现还是不行,而且过程中发现另一台设备也是gcc 4.8.5版本却可以编译。
看了下自己的gcc、g++版本都和可以编译的设备一致,与libstdc++.so也是一致的。于是更加奇怪为何无法编译。
直到查看到Makefile中:

   49 ifeq ($(HAS_CC),true)
   50 DEFAULT_CC = cc
   51 DEFAULT_CXX = c++
   52 else
   53 ifeq ($(HAS_GCC),true)
   54 DEFAULT_CC = gcc
   55 DEFAULT_CXX = g++
   56 else
   57 ifeq ($(HAS_CLANG),true)
   58 DEFAULT_CC = clang
   59 DEFAULT_CXX = clang++
   60 else
   61 DEFAULT_CC = no_c_compiler
   62 DEFAULT_CXX = no_c++_compiler

想起来自己机器可能设置了cc和c++,导致一来编译指令直接是cc和c++。

看看编译时日志输出果然证实了该猜测:

libtool: compile:  c++ -std=c++11 -DHAVE_CONFIG_H -I. -I.. -fPIC -O2 -Wframe-larger-than=16384 -g -pthread -DHAVE_PTHREAD=1 -DHAVE_ZLIB=1 -Wall -Wno-sign-compare -O2 -g -DNDEBUG -MT google/protobuf/compiler/plugin.pb.lo -MD -MP -MF google/protobuf/compiler/.deps/plugin.pb.Tpo -c google/protobuf/compiler/plugin.pb.cc -o google/protobuf/compiler/plugin.pb.o

发现都是c++,再一看c++的版本:

Using built-in specs.
COLLECT_GCC=c++
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-unknown-linux-gnu/4.9.2/lto-wrapper
Target: x86_64-unknown-linux-gnu
Configured with: ./configure --disable-multilib --enable-languages=c,c++
Thread model: posix
gcc version 4.9.2 (GCC)

吐血三升。。。。。

所以……最终把c++命令版本调一致就好了。
Done。

参考:gRPC编译- version `GLIBCXX_3.4.20' not found 问题

相关文章

  • gRPC编译- version `GLIBCXX_3.4.20&

    在编译gRPC的过程中发现编译到最后弹出如下错误提示: 看到网上的解释大多都是让更新gcc版本的。由于公司统一开发...

  • Centos7 编译安装 PHP grpc + protobu

    以PHP7.2为例 编译安装 grpc 扩展 (注意 grpc 版本对应的 protobuf 版本号) 编译安装 ...

  • gRPC之python

    安装 安装grpc 安装python grpc的protobuf的编译工具 安装protobuf的python依赖...

  • 2018-09-24 vs2015 grpc qt

    今天倒腾windows下面grpc编译以及在qt下面如何简单实用 1.grpc的编译工具准备 根据官网说明,安装下...

  • go gRPC基础

    sasuke.cn gRPC文档学习笔记 gRPC Basics - Go 学习目标: 定义服务 编译生成serv...

  • gRPC java的编译

    gRPC-java代码生成器 gRPC-java的代码生成器编译需要先编译protobuf,否则会报c++源文件无...

  • grpc编译步骤

  • 编译grpc报错

    编译grpc报错错误:对‘StrFormat(const char [45], const double&, do...

  • PHP源码编译gRPC

    Build from Source with gRPC C core library编译PHP扩展,执行phpiz...

  • Golang多版本管理神器gvm

    缘起 最近编译 GRPC 遇到了点坑,编译各种报错,经搜索调研发现用 mod 模式编译时对版本要求1.13及以上,...

网友评论

      本文标题:gRPC编译- version `GLIBCXX_3.4.20&

      本文链接:https://www.haomeiwen.com/subject/rdaasftx.html