0 前言

glibc是GNU按照LGPL许可协议发布的libc库,即c运行库,它是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc[15]。在Ubuntu中编译开源代码有时会遇到glibc版本过低问题,因此本文分析如何升级glibc。

1 版本查看

ldd --version # [13]

例如

图1.1 Ubuntu22.04查看glibc版本

2 安装/更新

2.1 apt安装

sudo apt-get install glibc # 安装
# or
sudo apt-get upgrade glibc # 升级[12]

2.2 deb安装

在参考资料[2]中找到glibc的deb安装包,并且从中抽取出libc.so.xx文件,然后参考《vim》的参考资料[33]的方法,替换libc.so.6的链接。这时候问题出现了:执行“ls”命令都会出现“Segement fault”!其他命令也出现类似的情况。因此是不能使用Ubuntu10.04自己去修复自己了。

由于发现了Ubuntu10.04中其实不止有一个lib.so.6,在/lib/tls/i686/cmov/目录下有一个(上面修改的就是这个),在/lib目录下也有一个。我想,是不是要将/lib目录下的那个也要改呢?于是我借助Ubuntu12.04挂载Ubuntu10.04的硬盘,然后进去修改。结果,重新启动Ubuntu,发现根本进入不了系统,出现了Kernel panic错误,如下图:

图2.1

看来,这个/lib/libc.so.6是Ubuntu10.04根啊,出错了将导致全军覆没(Ubtuntu12.04的/lib目录下并没有libc.so.6!)。/lib/tls/i686/cmov目录下的libc.so.6还好,出错只是导致一些命令执行不了而已。

逼不得已,安装了Ubuntu14.04,在执行apt-get upgrate时,终端是提示了很多地址,于是我敏感的觉察到这是Ubuntu14.04将要更新的内容的来源,于是复制出来,用浏览器打来,发现果然是Ubuntu的更新库!如参考资料[3]。于是在上面找到了一个glibc安装包。还是按照上面的方法,先替换/lib/tls/目录下的libc.so.6,这回ls命令没有出现上述的Segmentation fault了,很高兴,然后修改/lib目录下的libc.so.6(这个要借助Ubuntu12.04修改,同上)。这是,悲剧有又发生了,重启后又出现了Kernel panic。

2.3 源码安装

参考资料[14]提供了多个下载glibc的地址,例如下面命令从FTP下载:

wget http://ftp.gnu.org/pub/gnu/glibc/glibc-2.20.tar.bz2

2.3.1 编译

根据参考资料[6][7]的方法,编译glibc(glibc-2.20+glibc-linuxthreads-2.5,都从参考资料[2]处下载),在make时错误提示如下:

图2.2

换一个glibc-linuxthreads的版本(glibc-2.20+glibc-linuxthreads-2.5),重试,configure是错误如下。

图2.3

既然glibc-linuxthreads带来这么大的麻烦,那就不要它了。其实网上有人说,新版本的glibc不再使用glibc-linuxthreads了。在参考资料[4]中可以看到,glibc-linuxthreads最新的版本是glibc-linuxthreads-2.5,是2007年发布的,而新的glibc-2.20是2014年发布的。可见,glibc-linuxthreads的更新并没有跟上glibc。因此可以猜测,新版本的glibc不再使用glibc-linuxthreads了。

既然这样,就直接编译glibc-2.20。根据参考资料[7]的设置,最后编译成功。这时如果仿照《vim》的参考资料[26]的方法来替换/lib/libc.so.6,结果还是Kernel panic!这就麻烦了,虽然编译好了,但是无法使用。

2.3.2 安装

阅读glibc源码包中的INSTALL部分内容如下:

图2.4

根据这个提示,configure时用“--prefix=/usr”指定安装路径以替换自带系统自带glibc[6],下面是我的configure参数(保存在一个firsh.sh脚本中):

图2.5

make install后发现(要将《vim》中修改的libstdc++.so.6先恢复原来的,否则报错),GUI界面没了,黑乎乎的。重启系统时提示如下:

图2.6

只好根据提示输入密码,使用超级用户来维护了。进入系统后使用strings /lib/libc.so.6 | grep LIBC查看当前glibc的版本,发现已经是刚安装的那个版本了,这个和参考资料[6],说的一致。

由于进入不了GUI界面,因此想重新编译glibc。但是进入后发现使用vim和gedit等工具时提示Segment fault。唯有借助Ubuntu12.04修改上面的firsh.sh脚本,然后在进入Ubuntu10.04,执行make clean时,提示:

图2.7

可见,进入维护模式,不可以删除文件,就算是超级用户也不行!这样就没辙了,幸好做了一个系统备份,这个只好放弃了。

出现上面的问题,猜测是configure参数的问题,因此改变configure参数如下:

图2.8

再次编译,然后make install,结果如下:

图2.9

这时发现,ls命令可以正常使用,但是gedit就用不了了:Segmentation fault。重启后情况和图2.4一样。

参考资料

[1]ubuntu 10.04 glibc安装

[2]Index of /debian/pool/main/g/glibc

[3]Index of /ubuntu/pool/main/g/glibc

[4]gun_glibc

[5]【linux】提醒"libc.so.6: version `GLIBC_2.14' not found"系统的glibc版本太低

[6]glibc的安装编译

[7]解决 /lib/libc.so.6: version `GLIBC_2.11′ not found

[8]编译安装glibc

[9]自己编译 glibc 的问题?

[10]解决libc.so.6: version `GLIBC_2.14' not found问题

[11]ubuntu 10.04 glibc安装

[12]Ubuntu 更新glibc

[13]如何查看glibc版本

[14]glibc源码下载&在线阅读地址

[15]glibc(百度百科)

[16]升级glibc 系统一直保持segment fault等问题

Ubuntu安装升级glibc相关推荐

  1. ubuntu安装glibc

    Ubuntu下安装glibc 1. 安装/升级glibc 2. launch.json中添加路径映射 3. 调试 VSCode在ubuntu下调试无法打开libc-start.c raise.c等,一 ...

  2. linux更新后不能进入系统,Linux升级glibc后无法进入系统

    从源码安装升级glibc对于版本老的系统的非常危险的.我使用编译源码的方式将glibc由2.3升级到2.9, 解决了系统ls等各种指令不好使的问题后以为万事大吉.结果重启系统发现系统无法进入了,森马都 ...

  3. 基于fedora23的karora23初始版本安装crt信赖libpng升级glibc造成系统无法进入...

    glibc.txt 多次教训结果表明,初始系统安装libpng12.so.0会升级glibc,但升级后会造成系统故障,所以安装secureCRT之前必须先执行dnf updata升级系统,主要是内核版 ...

  4. cmake ubuntu安装卸载升级

    ubuntu安装: sudo apt-get install cmake-qt-gui 查看版本: cmake --version 于是我想试着升级cmake好了,网上看到的教程都是先 sudo ap ...

  5. Ubuntu下升级安装gcc-7.5.0

    Ubuntu16.04 手动升级gcc版本 1.首先下载压缩包 Index of /gnu/gcc/gcc-7.5.0http://ftp.gnu.org/gnu/gcc/gcc-7.5.0/2.具体 ...

  6. Ubuntu升级glibc库

    本人记录一下自己在升级glibc库的时候出现的问题,希望能够帮助其他网友. 1.先下载相对应版本的glibc项目 下载地址:Index of /gnu/glibc 2.解压之后进入解压之后的文件目录执 ...

  7. linux使用交叉工具链产生的程序怎么下载到mini2440里,Ubuntu安装ARM架构GCC工具链(ubuntu install ARM toolchain)最简单办法...

    一.安装ARM-Linux-GCC工具链 只需要一句命令: sudo apt-get install gcc-arm-linux-gnueabi 前提是你的Ubuntu系统版本是官网支持的最新的版本, ...

  8. 【ijkplayer】编译 Android 版本的 ijkplayer ① ( Ubuntu 安装 Git 软件 | 下载 ijkplayer 代码 )

    文章目录 一.安装 Git 软件 二.下载 ijkplayer 代码 参考 https://github.com/bilibili/ijkplayer 项目的编译过程 ; 一.安装 Git 软件 执行 ...

  9. debian 升级glibc

    原因 wheezy是2.13,编译android4.4 需要2.14的,报错如下: rebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8-linar ...

最新文章

  1. 半导体与智能汽车行业解决方案
  2. 四川音乐学录音艺术与计算机音乐,艺考中作曲专业和录音专业有什么不同呢?...
  3. Python+Selenium ----unittest单元测试框架
  4. 微软商店下载的python_Python 登录微软 Win10 应用商店
  5. 【061】百度迁徙-用地图大数据演绎国人的迁徙史诗
  6. matlab编译桁架有限元计算(附有完整代码)
  7. 根据奖品权重计算中奖概率实现抽奖的方法
  8. GPS时钟装置(时钟同步设备)在华能某水电公司应用方案
  9. 一文探究数据仓库体系(2.7万字建议收藏)
  10. php 秒拍视频解析,新浪微博视频解析源码_秒拍视频站外调用可自定义广告
  11. 数学通道的应用(六)-补偿气缸压力
  12. 计算机网络ap参数,酒店计算机网络(含无线AP)系统主要技术参数.docx
  13. Ubuntu18.04+Win10双系统安装步骤 问题排查
  14. object-c中的对象的释放
  15. 抖音拍摄脚本怎么写,掌握这几点快速拍摄爆款视频丨国仁网络资讯
  16. allegro如何快速的按照模板放置器件
  17. SCI论文全攻略:选刊/投稿/修回与退稿(ZZ)
  18. 【Angular2】 如何创建一个Angular2项目
  19. python库--jieba(中文分词)
  20. 考研上交823上岸东南蒙纳什心得

热门文章

  1. 华为云GaussDB(for Redis)揭秘:谁说Redis不能存大key
  2. Togaf 中的本手和妙手
  3. python飞行棋小游戏
  4. CMake 下载与安装
  5. 如何用PLSQL导出数据库存表结构信息
  6. 服务器密钥文件是什么类型,服务器密钥对类
  7. ArcEngine错误码
  8. springboot多用户B2C商城平台系统在线视频点播系统毕业设计毕设作品开题报告开题答辩PPT
  9. 前端一面又挂了?学习总结经验,别再让面试止步一面!
  10. Gradle下载超时