gcc升级未更新动态出现的一些’CXXABI_1.3.8、GLIBCXX_3.4.20 not found’问题及解决方案

原创 zhaoliang  2019-01-09 21:03  阅读 994 views 次

安装php的grpc扩展,要求gcc的版本不低于4.9,而自己使用的CentOS自带的gcc版本是4.4.7,于是进行了升级更新,更新到4.9.4。升级编译过程比较长,建议耐心等待。

下载gcc并更新

1.下载gcc-4.9.4

wget http://ftp.gnu.org/gnu/gcc/gcc-4.9.4/gcc-4.9.4.tar.bz2

2.解压并进入目录

tar -xf gcc-4.9.4.tar.bz2
cd gcc-4.9.4

3.执行download_prerequisites脚本下载依赖包,下载时间可能比较长

./contrib/download_prerequisites

4.创建编译输出目录,将所有的中间文件都生成到该目录

mkdir gcc-build-4.9.4
cd gcc-build-4.9.4

5.配置

../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib

参数解释:
–enable-checking=release 增加一些检查,也可以–disable-checking生成的编译器在编译过程中不做额外检查
–enable-languages=c,c++ 你要让你的gcc支持的编程语言
–disable-multilib 取消多目标库编译(取消32位库编译)
6.编译安装

make -j4 #系统是4核的
make install

7.更新gcc动态库

cp gcc-build-4.9.4/stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.20 /usr/lib64/
#删除原有的/usr/lib64/libstdc++.so.6软链
#创建新的软链
ln -s /usr/lib64/libstdc++.so.6.0.20 /usr/lib64/libstdc++.so.6

最后一步非常关键,最初只是替换了gcc,没有对动态库进行更新,所以在后续安装grpc的过程中,遇到了以下一系列问题.

1)无法识别的命令行选项“-Wno-implicit-fallthrough”


[C] Compiling third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c
cc1: warnings being treated as errors
In file included from third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c:19:
third_party/boringssl/include/openssl/sha.h:111: 错误:没有声明任何东西
third_party/boringssl/include/openssl/sha.h:112: 错误:没有声明任何东西
cc1: 错误:无法识别的命令行选项“-Wno-implicit-fallthrough”
make: *** [/usr/local/src/grpc/objs/opt/third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.o] 错误 1

2)错误:无法识别的命令行选项“-std=c11”

cc -fvisibility=hidden -DOPENSSL_NO_ASM -D_GNU_SOURCE -DWIN32_LEAN_AND_MEAN -D_HAS_EXCEPTIONS=0 -DNOMINMAX -DGRPC_ARES=0 -DGRPC_POSIX_FORK_ALLOW_PTHREAD_ATFORK=1 -I. -I/usr/local/src/grpc-1.17.0 -DPHP_ATOM_INC -I/usr/local/src/grpc-1.17.0/include -I/usr/local/src/grpc-1.17.0/main -I/usr/local/src/grpc-1.17.0 -I/xdfapp/server/php7.0/include/php -I/xdfapp/server/php7.0/include/php/main -I/xdfapp/server/php7.0/include/php/TSRM -I/xdfapp/server/php7.0/include/php/Zend -I/xdfapp/server/php7.0/include/php/ext -I/xdfapp/server/php7.0/include/php/ext/date/lib -I/usr/local/src/grpc-1.17.0/include -I/usr/local/src/grpc-1.17.0/src/php/ext/grpc -I/usr/local/src/grpc-1.17.0/third_party/boringssl/include -I/usr/local/src/grpc-1.17.0/third_party/address_sorting/include -I/usr/local/src/grpc-1.17.0/third_party/nanopb -DHAVE_CONFIG_H -Wall -Werror -Wno-parentheses-equality -Wno-unused-value -std=c11 -g -O2 -D PB_FIELD_32BIT=1 -c /usr/local/src/grpc-1.17.0/src/php/ext/grpc/byte_buffer.c -DPIC
cc1: 错误:无法识别的命令行选项“-std=c11”
cc1: warnings being treated as errors
cc1: 错误:无法识别的命令行选项“-Wno-parentheses-equality”
make: *** [src/php/ext/grpc/byte_buffer.lo] 错误 1

 3)`CXXABI_1.3.8' not found `GLIBCXX_3.4.20' not found

[PROTOC] Generating protobuf CC file from src/proto/grpc/testing/echo.proto
/usr/local/src/grpc/bins/opt/grpc_cpp_plugin: /usr/lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /usr/local/src/grpc/bins/opt/grpc_cpp_plugin)
/usr/local/src/grpc/bins/opt/grpc_cpp_plugin: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /usr/local/src/grpc/bins/opt/grpc_cpp_plugin)
/usr/local/src/grpc/bins/opt/grpc_cpp_plugin: /usr/lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /usr/local/src/grpc/bins/opt/grpc_cpp_plugin)
/usr/local/src/grpc/bins/opt/grpc_cpp_plugin: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /usr/local/src/grpc/bins/opt/grpc_cpp_plugin)
--grpc_out: protoc-gen-grpc: Plugin failed with status code 1.
--grpc_out: protoc-gen-grpc: Plugin failed with status code 1.
/usr/local/src/grpc/bins/opt/grpc_cpp_plugin: /usr/lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /usr/local/src/grpc/bins/opt/grpc_cpp_plugin)
/usr/local/src/grpc/bins/opt/grpc_cpp_plugin: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /usr/local/src/grpc/bins/opt/grpc_cpp_plugin)
--grpc_out: protoc-gen-grpc: Plugin failed with status code 1.

更新libstdc++.so.6动态库后,以上问题悉数解决。

本文地址:http://blog.58cm.cn:8088/archives/548.html
版权声明:本文为原创文章,版权归 zhaoliang 所有,欢迎分享本文,转载请保留出处!

评论已关闭!