Ubuntu 18.04 升级 libc Your system has GNU libc version 2.27. The calibre binaries require at least version: 2.31 (released on 2020-02-01). Update your system.
注意,libc是系统底层库,每条命令执行都会调用,所以请谨慎修改!!!
注意,libc是系统底层库,每条命令执行都会调用,所以请谨慎修改!!!
注意,libc是系统底层库,每条命令执行都会调用,所以请谨慎修改!!!
修改错误会导致系统命令行和其他界面失效,启动系统时报错。
------------------------------------------------------------------------------------
制作 ubuntu 的启动盘(U盘或光盘), 通过试用 ubuntu(选择 Try Ubuntu without installing) 来完成 glibc 最后的安装
或
请准备一个U盘,PE系统,可以在文件修改失败时,救援系统。
进入 ubuntu live 试用环境, 连接好网络, 同样准备以下环境
1 2 | $ sudo apt update $ sudo apt install build-essential gawk bison |
-------------------------------------------------------------------------------------
经过测试,在Ubuntu 18.04 下 将默认 libc 2.27 替换成 2.31 后系统启动失败。
-------- 正文开始 ---------
安装 calibre 时,提示 GNU libc 版本低。( Ubuntu 18.04 版本是 2.27 最方便的方法是升级系统到 20 或 22)
1 2 3 4 | sudo - v && wget -nv -O- https: //download .calibre-ebook.com /linux-installer .sh | sudo sh /dev/stdin Using python executable: /usr/bin/python3 2022-12-06 11:06:49 URL:https: //download .calibre-ebook.com /linux-installer .sh [33639 /33639 ] -> "-" [1] Your system has GNU libc version 2.27. The calibre binaries require at least version: 2.31 (released on 2020-02-01). Update your system. |
查看源码所知,libc(C 标准库) 是 Python 标准库自带的 ctypes 模块里调用的。
问:为什么python 要用到 libc 库呢?
答:因为Python 和 C 的混合编程工具,所以要用到
文件位置:
Windows 系统下的 C 标准库动态链接文件为 msvcrt.dll
(一般在目录 C:\Windows\System32 和 C:\Windows\SysWOW64 下分别对应 32-bit 和 64-bit,
使用时不用刻意区分,Python 会选择合适的)
Linux 系统下的 C 标准库动态链接文件为 libc.so.6 (以 64-bit Ubuntu 系统为例, 在目录 /lib/x86_64-linux-gnu 下)
两种查看 glibc 版本方法:
方法一:
1 2 3 4 5 6 | ldd --version ldd (Ubuntu GLIBC 2.27-3ubuntu1.5) 2.27 Copyright (C) 2018 自由软件基金会。 这是一个自由软件;请见源代码的授权条款。本软件不含任何没有担保;甚至不保证适销性 或者适合某些特殊目的。 由 Roland McGrath 和 Ulrich Drepper 编写。 |
方法二:
1 | strings /lib/x86_64-linux-gnu/libm .so.6 | grep GLIBC_ |
先查找一下本机的 libc 位置。
因为是 libc 是动态库,是被调用的,所以用 whereis 命令查询不到,就只能用 find 搜索了。
查到到的结果:
1 2 3 4 | $ find /usr -name "libc.so" /usr/lib32/libc .so /usr/lib/x86_64-linux-gnu/libc .so /usr/libx32/libc .so |
根据文章开头提示“GNU libc version 2.27” 那就是 /usr/lib/x86_64-linux-gnu/libc.so 这个。
备份: tar 打包
注意,不要用 mv 直接修改 libc.so.6 和 libm.so.6 名字方式备份 !!!
注意,不要用 mv 直接修改 libc.so.6 和 libm.so.6 名字方式备份 !!!
注意,不要用 mv 直接修改 libc.so.6 和 libm.so.6 名字方式备份 !!!
每条命令都会用到这个库,如果修改了,任何命令就执行不了了
1 2 | cd /usr/lib/x86_64-linux-gnu/ sudo tar -cf libc.so.6_bak_2.27. tar libc.so.6 libm.so.6 |
备份好的:
下载源码编译安装:
更新依赖工具:
1 | $ sudo apt install build-essential gawk bison texinfo |
修改默认环境变量
1 2 3 4 5 | ## 把旧的变量内容保存到 LD_LIBRARY_PATH_old 变量里 LD_LIBRARY_PATH_old=$LD_LIBRARY_PATH ## 清空(删除) 变量内容 LD_LIBRARY_PATH= |
下载地址:
http://ftp.gnu.org/pub/gnu/libc/
解压: (注意,不要在有中文的路径下编译)
1 2 | tar -zxf glibc-2.31. tar .gz cd glibc-2.31/ |
注:注意版本号替换成你的
新建目录:
1 | mkdir build/ && cd build/ |
配置安装路径:
1 | .. /configure --prefix= /usr/local/glibc-2 .31 |
注:注意版本号替换成你的
显示以下内容,执行成功:
1 2 3 4 5 | configure: creating . /config .status config.status: creating config. make config.status: creating Makefile config.status: creating config.h config.status: executing default commands |
目录下也产生文件:
1 2 3 4 5 6 7 8 | $ ll 总用量 96K drwxrwxr-x 2 ubuntu ubuntu 4.0K 12月 6 12:37 bits/ -rw-rw-r-- 1 ubuntu ubuntu 7.9K 12月 6 12:37 config.h -rw-rw-r-- 1 ubuntu ubuntu 33K 12月 6 12:37 config.log -rw-rw-r-- 1 ubuntu ubuntu 4.2K 12月 6 12:37 config. make -rwxrwxr-x 1 ubuntu ubuntu 33K 12月 6 12:37 config.status* -rw-rw-r-- 1 ubuntu ubuntu 560 12月 6 12:37 Makefile |
编译:
1 | sudo make -j4 |
-j4 代表用4线程编译(加快编译速度),编译出错时,可以不加
安装:
1 | suod make install |
复制 生成 so 文件:
1 2 | sudo cp /usr/local/glibc-2 .31 /lib/libc-2 .31.so /lib/x86_64-linux-gnu/ sudo cp /usr/local/glibc-2 .31 /lib/libm-2 .31.so /lib/x86_64-linux-gnu/ |
注:目录 /usr/local/glibc-2.31/ 就是上面 --prefix=/usr/local/glibc-2.31 设置的安装路径
创建软件连接:
注意,要准备好启动盘或救援设备,再操作下面这步,修改失败系统可能会出问题!!!
注意,要准备好启动盘或救援设备,再操作下面这步,修改失败系统可能会出问题!!!
注意,要准备好启动盘或救援设备,再操作下面这步,修改失败系统可能会出问题!!!
1 2 | cd /lib/x86_64-linux-gnu/ sudo ln -sf libm-2.31.so libc.so.6 && sudo ln -sf libc-2.31.so libm.so.6 |
-sf, s 创建软连接, f是强制覆盖
验证:
使用下面任意一条命令,查看替换完的版本
1 2 3 | ldd --version 或 strings /lib/x86_64-linux-gnu/libm .so.6 | grep GLIBC_ |
----------
错误提示:
在 ../configure 时 ,
提示: gawk 丢失或太旧,需要安装
1 2 3 | configure: error: *** These critical programs are missing or too old: gawk bison *** Check the INSTALL file for required versions. |
提示: makeinfo 版本警告,是 texinfo 需要安装
1 2 3 4 5 6 7 8 9 | configure: WARNING: *** These auxiliary programs are missing or incompatible versions: makeinfo *** some features or tests will be disabled. *** Check the INSTALL file for required versions. checking LD_LIBRARY_PATH variable... contains current directory configure: error: *** LD_LIBRARY_PATH shouldn't contain the current directory when *** building glibc. Please change the environment variable *** and run configure again. |
提示:LD_LIBRARY_PATH 变量内容问题
1 2 3 4 | configure: error: *** LD_LIBRARY_PATH shouldn't contain the current directory when *** building glibc. Please change the environment variable *** and run configure again. |
提示:注意,不要在有中文的路径下编
1 | Makefile:142: recipe for target 'glibc-2.31/build/manual/libc.info' failed |
参考:
https://blog.csdn.net/jiang_huixin/article/details/123414527
https://blog.csdn.net/u014634615/article/details/120333287
https://blog.csdn.net/qq_31511955/article/details/88179586
https://blog.csdn.net/jiang_huixin/article/details/123414527
https://blog.csdn.net/qq_24755999/article/details/78722788
https://zhuanlan.zhihu.com/p/549870561
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
2021-12-06 Python模块之re - 正则表达式
2020-12-06 暴风电视TV toolbox改busybox增加命令行Shell 功能