最近在给编译环境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找不到的编译问题)》