如何升级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以上的版本

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值