升級libstdc++、libgcc_s.so、libc.so.6


參考資料:
https://blog.csdn.net/ltl451011/article/details/7763892/

https://blog.csdn.net/na_beginning/article/details/53413997


一、為什么要升級?

有時候在鏈接外部動態庫的時候,會出以下類似的問題:
./bin/mysqld: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by ./bin/mysqld)
./bin/mysqld: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by ./bin/mysqld)

出現這種問題就是因為“編譯庫的編譯器” 和 “編譯當前程序的編譯器” 版本是不一樣的,在具體一點就是因為,當前程序的編譯器的版本是比較低的,只要升級一下就可以了。


二、查詢庫的版本
1、
可通過strings /lib64/libc.so.6 | grep GLIBC_ 查看系統 GLIBC 支持的版本
可通過strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX 查看系統 GLIBCXX 支持的版本

2、指令安裝的,可以這種查詢方式
rpm -qa | grep gdb
rpm -qa |grep glibc


3、指令安裝的,可以這種卸載方式(以卸載gdb為例)
rpm -e --nodeps gdb-7.2-83.el6.x86_64


二、libgcc_s.so跟libstdc++.so的升級,通過升級GCC來實現

1、下載GCC5.4.0的源碼進行編譯
GCC完成升級之后,在系統庫目錄下,刪除舊庫的軟鏈接,創建新的軟鏈接,指向新版本的庫。

2、檢查系統庫目錄,配置新的libstdc++.so
根據編譯gcc時的配置,在指向目錄下,找到生成的庫為libstdc++.so.6.0.21

在系統庫目錄下 /lib64/ 檢查存不存在libstdc++.so.6.0.21
不存在 則復制libstdc++.so.6.0.21 到 /lib64/

檢查存不存在libstdc++.so的軟連接,將舊的軟鏈接全部刪除掉。
創建新的軟鏈接,指向 /lib64/libstdc++.so.6.0.21

檢查其他的系統庫目錄


3、檢查系統庫目錄,配置新的libgcc_s.so
仿照上面libstdc++.so的操作

 

三、libc.so.6升級
參考
https://blog.51cto.com/12077732/2125618
https://blog.csdn.net/superyzh/article/details/79472190
https://www.cnblogs.com/Mrhuangrui/p/7766554.html
https://www.jianshu.com/p/513e01fbd3e0

glibc是gnu發布的libc庫,即c運行庫,glibc是linux系統中最底層的api,幾乎其它任何運行庫都會依賴於glibc。
glibc除了封裝linux操作系統所提供的系統服務外,它本身也提供了許多其它一些必要功能服務的實現。
很多linux的基本命令,比如cp, rm, ll,ln等,都得依賴於它,如果操作錯誤或者升級失敗會導致系統命令不能使用,
嚴重的造成系統退出后無法重新進入,所以操作時候需要慎重。

1、下載glibc的源碼進行編譯
wget http://ftp.gnu.org/gnu/glibc/glibc-2.14.tar.gz
使用下面的鏡像應該會快點
wget http://mirrors.ustc.edu.cn/gnu/libc/

2、檢查系統庫目錄,配置新的libc.so
根據編譯時的配置,在指向目錄下,找到生成的庫

檢查系統庫目錄,刪除舊庫的軟鏈接,創建新庫的軟鏈接。


問題:
1、https://blog.csdn.net/zhenyuhe/article/details/86737328
這種方式,相當於從網上下載了一個較新版本的libstdc++.so庫,
替換了系統的舊庫,這種方式沒有進行驗證。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM