天天看點

如何更新libc.so.6以及更新後引發的災難

什麼是libc/glibc?,他們有啥用?

不知道的話,你可以點右上角的×了,你還是先思考一下為什麼要更新?一定要更新嗎?沒别的辦法了?

glibc是GNU釋出的libc庫,即c運作庫。glibc是linux系統中最底層的api,幾乎其它任何運作庫都會依賴于glibc。glibc除了封裝linux作業系統所提供的系統服務外,它本身也提供了許多其它一些必要功能服務的實作。

首先說一下我為什麼會去更新glibc,大概就是年少無知吧。。。

硬體環境:RK3399

軟體環境:aarch64 centos7.9  libc  2.17 updateEngine

過程:

我把的centos7.9移植rk3399上,但是由于需要使用rk提供的updateEngine做ota更新,編譯sdk後生成updateEngine工具,拷貝到centos後無法運作,缺少libpng.so,然後拷貝libpng.so到系統下,發現libc.so等等庫版本太低了,于是我第一的想法就是解決版本庫太低的問題,就開始了我的更新之路了。

下載下傳連結:http://ftp.gnu.org/gnu/glibc/

編譯步驟:1../configure 2.make 3.make install,報錯的話就google一下就ok,都能解決

參考一下:https://blog.csdn.net/officercat/article/details/39520227

更新完成:updateEngine可以正常使用了,但是麻煩事也來了,測試那邊各種提issue,hwclock 段錯誤,lspci 重定向出錯,lspci -vvv | grep失敗也報錯,yum update系統當機,yum解除安裝軟體會把其他系統工具莫名奇妙解除安裝等等。

解決問題:我發現舊版本的centos是不存在這個問題,然後hwclock和 lspci等軟體工具的問題可以重新編譯即可解決,但是yum update系統崩潰(因為檢測到各種lib和source依賴之間不對,yum update會進行大量的更新,更新完就挂了)。由于更新了系統不穩定性太大了,最近決定還原回去,問題解決。

回到原點:怎麼解決updateEngine的問題呢?

updateEngine編譯環境:Ubuntu18.04 ,rk3399 sdk

解決方案:

1.使用centos的lib編譯updateEngine,隻要它不用高版本libc的特性就好,修改Makefile。

2.靜态編譯,靜态編譯就是編譯器在編譯可執行檔案的時候,将可執行檔案需要調用的對應動态連結庫(.so)中的部分提取出來,連結到可執行檔案中去,使可執行檔案在運作的時候不依賴于動态連結庫。修改Makefile

我用的就是第三種

3.在我準備修改Makefile的時候我發現了updateEngine有個No_UI的變量,噢噢噢,然後再仔細看一下libpng庫是updateENgine UI界面的時候調用,我們并不需要,然後修改一下配置檔案去掉,解決了。

總結:centos為什麼系統庫都這麼老了,就是為了穩定性,更新有風險,請謹慎。現在centos8以上的系統庫都已經比較新了,需要的話可以換到centos8以上的版本

繼續閱讀