先驗知識:
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命令不能用了。