SUSE glibc升级为2.18过程记录
先验知识:
1、运行时,动态库的装载依赖于ld-linux.so.6的实现,它查找共享库的顺序如下:
(1)ld-linux.so.6在可执行的目标文件中被指定,可用readelf命令查看
(2)ld-linux.so.6缺省在/usr/lib和lib中搜索;当glibc安装到/usr/local下时,它查找/usr/local/lib
(3)LD_LIBRARY_PATH环境变量中所设定的路径
(4)/etc/ld.so.conf(或/usr/local/etc/ld.so.conf)中所指定的路径,由ldconfig生成二进制的ld.so.cache中
2、编译时,搜索库的路径顺序如下:
(1)ld-linux.so.6由gcc的spec文件中所设定
(2)gcc --print-search-dirs所打印出的路径,主要是libgcc_s.so等库。可以通过GCC_EXEC_PREFIX来设定
(3)LIBRARY_PATH环境变量中所设定的路径,或编译的命令行中指定的-L/usr/local/lib
(2)binutils中的ld所设定的缺省搜索路径顺序,编译binutils时指定。(可以通过“ld --verbose | grep SEARCH”来查看)
3、二进制程序的搜索路径顺序为PATH环境变量中所设定。一般/usr/local/bin高于/usr/bin
4、编译时的头文件的搜索路径顺序,与library的查找顺序类似。一般/usr/local/include高于/usr/include
先升级了gcc为4.8.2,然后下载2.18的源码安装,源码解压后:
cd glibc-2.18
mkdir build
cd build
../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
make && make install
需要等大概10分钟。
如果configure时候自己指定安装目录会比较麻烦,见后面参考文章,自己就把库搞错了导致linux下所有命令都提示段错误。最后还是重新设置LD LIB变量解决的段错误恢复过来的。(Probably your LD_LIBRARY_PATH includes a dot / .
and that Lib
directory contains standard libraries like libc, so what ever command you issue, system picks a library from that path and something goes wrong.)
[root
@HY
build]# strings /lib64/libc.so.
6
| grep GLIBC
GLIBC_2.
2.5
GLIBC_2.
2.6
GLIBC_2.
3
GLIBC_2.
3.2
GLIBC_2.
3.3
GLIBC_2.
3.4
GLIBC_2.
4
GLIBC_2.
5
GLIBC_2.
6
GLIBC_2.
7
GLIBC_2.
8
GLIBC_2.
9
GLIBC_2.
10
GLIBC_2.
11
GLIBC_2.
12
GLIBC_2.
13
GLIBC_2.
14
GLIBC_2.
15
GLIBC_2.
16
GLIBC_2.
18
GLIBC_PRIVATE
安装过程遇到的错误解决,因为gcc 4.8.2依赖库的原因需要设置正确的LD LIB变量:
configure: error: cannot compute suffix of object files: cannot compile
解决办法:
我的gmp, mpfr, mpc都是使用默认参数安装的,没指定任何参数
./configure
make
make install
所以直接使用下面的命令设置环境变量就可以了:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
如果安装时指定了安装目录,使用类似下面的命令:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/gcc-4.6.3/mpc-0.9/mpc_install/lib:/opt/gcc-4.6.3/gmp-5.0.4/gmp_install/lib
参考:http://www.jiagoumi.com/work/811.html
【工作】Centos6.5 升级glibc解决“libc.so.6: version GLIBC_2.14 not found”报错问题
写在前面:
从上面报错可以看出,程序运行时候,没有找到“GLIBC_2.14”这个版本库,而默认的Centos6.5 glibc版本最高为2.12, 所以需要更新系统glibc库。
解决办法:
1.查看系统版本和glibc库版本
2.下载软件并升级:
继续完成后续的安装:
3.再次查看glibc支持的版本:
其他知识点:
接下来当你建立新的软链接时候,会发现ln命令不能用了。