C++11 gcc升级到5.2.0后报错:... version 'GLIBCXX_3.4.17' not found

版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net/10km/article/details/50371044

我的linux操作系统为centos6.5,为了能编译C++11程序,需要对gcc编译器进行升级(centos6.5默认安装的gcc编译器是4.4.7,支持C++11需要至少4.8.1)到gcc5.2.0,参照《【Linux】CentOS6.5 gcc升级方式》对编译器进行了升级,耗时两个多小时。 等编译升级就绪,编译了C++11的代码,运行时,报错:

/usr/lib64/libstdc++.so.6: version ‘GLIBCXX_3.4.17’ not found

查看/usr/lib64/libstdc++.so.6,发现指向libstdc++.so.6.0.13,只支持到3.4.13

[root@t2-centos6 lib64]# cd /usr/lib64 [root@t2-centos6 lib64]# ll libstdc++.so.6* lrwxrwxrwx. 1 root root 19 12月 21 11:14 libstdc++.so.6 -> libstdc++.so.6.0.13 -rwxr-xr-x. 1 root root 987096 12月 21 11:18 libstdc++.so.6.0.13 [root@t2-centos6 lib64]# strings libstdc++.so.6 |grep GLIBCXX GLIBCXX_3.4 GLIBCXX_3.4.1 GLIBCXX_3.4.2 GLIBCXX_3.4.3 GLIBCXX_3.4.4 GLIBCXX_3.4.5 GLIBCXX_3.4.6 GLIBCXX_3.4.7 GLIBCXX_3.4.8 GLIBCXX_3.4.9 GLIBCXX_3.4.10 GLIBCXX_3.4.11 GLIBCXX_3.4.12 GLIBCXX_3.4.13 GLIBCXX_FORCE_NEW GLIBCXX_DEBUG_MESSAGE_LENGTH

再去之前编译的gcc5.2.0目录查看

[root@t2-centos6 lib64]# ll /usr/local/build/gcc-5.2.0/x86_64-unknown-linux-gnu//libstdc++-v3/src/.libs/ 总用量 70532 -rw-r–r–. 1 root root 45072 12月 20 13:49 compatibility-atomic-c++0x.o -rw-r–r–. 1 root root 141944 12月 20 13:49 compatibility-c++0x.o -rw-r–r–. 1 root root 20208 12月 20 13:49 compatibility-chrono.o -rw-r–r–. 1 root root 35576 12月 20 13:49 compatibility-condvar.o -rw-r–r–. 1 root root 8488 12月 20 13:49 compatibility-debug_list-2.o -rw-r–r–. 1 root root 10464 12月 20 13:49 compatibility-debug_list.o -rw-r–r–. 1 root root 187104 12月 20 13:49 compatibility.o -rw-r–r–. 1 root root 115856 12月 20 13:49 compatibility-thread-c++0x.o -rw-r–r–. 1 root root 30126742 12月 20 13:49 libstdc++.a -rw-r–r–. 1 root root 29925050 12月 20 13:49 libstdc++convenience.a lrwxrwxrwx. 1 root root 26 12月 20 13:49 libstdc++convenience.la -> ../libstdc++convenience.la lrwxrwxrwx. 1 root root 15 12月 20 13:49 libstdc++.la -> ../libstdc++.la -rw-r–r–. 1 root root 965 12月 20 13:49 libstdc++.lai lrwxrwxrwx. 1 root root 19 12月 20 13:49 libstdc++.so -> libstdc++.so.6.0.21 lrwxrwxrwx. 1 root root 19 12月 20 13:49 libstdc++.so.6 -> libstdc++.so.6.0.21 -rwxr-xr-x. 1 root root 11582206 12月 20 13:49 libstdc++.so.6.0.21 //gcc 5.2.0编译出的so文件

上面的文件列表中可以看出gcc5.2.0已经编译出libstdc++.so.6.0.21,但在安装时(make install)并没有更新/usr/lib64/libstdc++.so.6的软链接,所以libstdc++.so仍然指向gcc4.4.7的旧so文件。 所以解决办法,就是将libstdc++.so.6.0.21复制到/usr/lib64,然后修改libstdc++.so.6软链接

[root@t2-centos6 lib64]#cd /usr/local/build/gcc-5.2.0/x86_64-unknown-linux-gnu//libstdc++-v3/src/.libs/ [root@t2-centos6 lib64]# cp libstdc++.so.6.0.21 /usr/lib64 //复制到/usr/lib64 [root@t2-centos6 lib64]# ln -sf libstdc++.so.6.0.21 libstdc++.so.6 // 修改libstdc++.so.6软链接指向新的so

再次查看libstdc++.so.6的版本支持情况,已经支持到GLIBCXX_3.4.21了,满足要求

[root@t2-centos6 lib64]# strings libstdc++.so.6 |grep GLIBCXX GLIBCXX_3.4 GLIBCXX_3.4.1 GLIBCXX_3.4.2 GLIBCXX_3.4.3 GLIBCXX_3.4.4 GLIBCXX_3.4.5 GLIBCXX_3.4.6 GLIBCXX_3.4.7 GLIBCXX_3.4.8 GLIBCXX_3.4.9 GLIBCXX_3.4.10 GLIBCXX_3.4.11 GLIBCXX_3.4.12 GLIBCXX_3.4.13 GLIBCXX_3.4.14 GLIBCXX_3.4.15 GLIBCXX_3.4.16 GLIBCXX_3.4.17 GLIBCXX_3.4.18 GLIBCXX_3.4.19 GLIBCXX_3.4.20 GLIBCXX_3.4.21 GLIBCXX_FORCE_NEW GLIBCXX_DEBUG_MESSAGE_LENGTH

再次运行程序就正常了

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券