在編譯gRPC的過程中發(fā)現(xiàn)編譯到最后彈出如下錯(cuò)誤提示:
[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
看到網(wǎng)上的解釋大多都是讓更新gcc版本的。由于公司統(tǒng)一開發(fā)機(jī)的gcc版本不方便升級(jí)赤赊,所以自己用了一天時(shí)間來查找這個(gè)問題到底是怎么引起的导而。最終卻發(fā)現(xiàn)其實(shí)這樣提示的原因是目前使用的編譯指令和配置的libstdc++.so不一致造成的誉己。
其實(shí)用時(shí)這么多的原因主要還是自己差錯(cuò)方向錯(cuò)誤衣盾,一直以為是因?yàn)榇a要求的版本太高導(dǎo)致本機(jī)gcc無法編譯拾酝,嘗試了多次降版本編譯后發(fā)現(xiàn)還是不行劲绪,而且過程中發(fā)現(xiàn)另一臺(tái)設(shè)備也是gcc 4.8.5版本卻可以編譯男窟。
看了下自己的gcc、g++版本都和可以編譯的設(shè)備一致贾富,與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
想起來自己機(jī)器可能設(shè)置了cc和c++祷安,導(dǎo)致一來編譯指令直接是cc和c++姥芥。
看看編譯時(shí)日志輸出果然證實(shí)了該猜測:
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
發(fā)現(xiàn)都是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++命令版本調(diào)一致就好了。
Done读整。