在编译gRPC的过程中发现编译到最后弹出如下错误提示:
1 | [PROTOC] Generating protobuf CC file from src/proto/grpc/channelz/channelz.proto |
看到网上的解释大多都是让更新gcc版本的。由于公司统一开发机的gcc版本不方便升级,所以自己用了一天时间来查找这个问题到底是怎么引起的。最终却发现其实这样提示的原因是目前使用的编译指令和配置的libstdc++.so不一致造成的。
其实用时这么多的原因主要还是自己差错方向错误,一直以为是因为代码要求的版本太高导致本机gcc无法编译,尝试了多次降版本编译后发现还是不行,而且过程中发现另一台设备也是gcc 4.8.5版本却可以编译。
看了下自己的gcc、g++版本都和可以编译的设备一致,与libstdc++.so也是一致的。于是更加奇怪为何无法编译。
直到查看到Makefile中:
1 | 49 ifeq ($(HAS_CC),true) |
想起来自己机器可能设置了cc和c++,导致一来编译指令直接是cc和c++。
看看编译时日志输出果然证实了该猜测:
1 | 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++的版本:
1 | Using built-in specs. |
吐血三升。。。。。
所以……最终把c++命令版本调一致就好了。
Done。