最近在给编译环境centOS 6.5安装新版clang (clang 3.4/3.5)的时候,虽然已经装了gcc 4.9.1, 但编译的时候(参考clang官方主页http://clang.llvm.org/get_started.html的步骤,在独立build目录下运行clang自带的configure脚本),仍然出了“c compiler cannot create executables”的提示,去查看log信息,发现里面有下面几个错误:

clang: /lib64/libc.so.6: version `GLIBC_2.15' not found (required by clang)
clang: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by clang)
clang: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.18' not found (required by clang)
clang: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by clang)

这里是两个系统版本库版本过低的问题,一个是关于C++的库libstdc++, 一个是关于C系统基础运行库GLIBC,前者比较好办,后者十分基础,一般一个版本的centos会指定一个GLIBC,可以去升级,但这样CentOS本身版本的稳定性的可能就会被破坏。

 

1. 我们着手解决GLIBCXX的问题,C++库,首先查看错误信息提示中的lib文件的信息。

$ strings /usr/lib64/libstdc++.so.6 | grep GLIBC

  •  这里是打印 libstdc++.so.6的输出信息中限定(grep) GLIBC库的信息

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  
GLIBC_2.3  
GLIBC_2.2.5  
GLIBC_2.3.2  
GLIBCXX_FORCE_NEW  
GLIBCXX_DEBUG_MESSAGE_LENGTH

  •  


$ll  /usr/lib64/libstdc++.so.6  
 
lrwxrwxrwx 1 root root 30 Sep 23 06:21 /usr/lib64/libstdc++.so.6 -> /usr/lib64/libstdc++.so.6.0.13


也就是系统以前有一个6.0.13版本,确实比较旧了,那么我们有新版本么?我们安装了gcc 4.9.1,按理说应该已经装了新版的libstdC++.,如果没有,可以去网上下一个。

先在本机找:

find / -name libstdc++.so.6*

  •  

  • 我们发现,gcc安装时把/libstdc++.so.6.0.20 安装到了/usr/local/lib64下,但并没有改变libstdc++.so.6的链接指向。

那么我们手动来更新软连接(也可以字节指向/usr/local下的文件,不用拷贝, 看鸽子的文件管理习惯)

 
$ cp /usr/local/lib64/libstdc++.so.6.0.20 /usr/lib64   
$ rm -rf /usr/lib64/libstdc++.so.6  
$ ln -s /usr/lib64/libstdc++.so.6.0.20 /usr/lib64/libstdc++.so.6  
$ strings /usr/lib64/libstdc++.so.6 | grep GLIBC


然后结果:

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  
GLIBC_2.3  
GLIBC_2.2.5  
GLIBC_2.3.2  
GLIBCXX_FORCE_NEW  
GLIBCXX_DEBUG_MESSAGE_LENGTH

  •  


库更新完毕。我们已经支持到了GLIBCXX_3.4.20

此时再进行编译,GLIBCXX的问题是没有了。

2. 关于C基本运行库GLIBC,因为要慎重,所以我写在下一篇博客:

Linux/CentOS 升级C基本运行库CLIBC的注意事项(当想解决GLIBC_2.x找不到的编译问题)