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 试用环境, 连接好网络, 同样准备以下环境

$ 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)

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 版本方法:

方法一:

ldd --version
ldd (Ubuntu GLIBC 2.27-3ubuntu1.5) 2.27
Copyright (C) 2018 自由软件基金会。
这是一个自由软件;请见源代码的授权条款。本软件不含任何没有担保;甚至不保证适销性
或者适合某些特殊目的。
由 Roland McGrath 和 Ulrich Drepper 编写。

方法二:

strings /lib/x86_64-linux-gnu/libm.so.6 | grep GLIBC_

 


先查找一下本机的 libc 位置。

因为是 libc 是动态库,是被调用的,所以用 whereis 命令查询不到,就只能用 find 搜索了。

查到到的结果:

$ 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 名字方式备份 !!!

每条命令都会用到这个库,如果修改了,任何命令就执行不了了

cd /usr/lib/x86_64-linux-gnu/
sudo tar -cf libc.so.6_bak_2.27.tar libc.so.6 libm.so.6

    备份好的:

  点击下载:libc.so.6_bak_2.27.tar

  点击下载:libc.so.6_bak_2.31.tar

 


下载源码编译安装:

更新依赖工具

$ sudo apt install build-essential gawk bison texinfo

 

修改默认环境变量

## 把旧的变量内容保存到 LD_LIBRARY_PATH_old 变量里
LD_LIBRARY_PATH_old=$LD_LIBRARY_PATH

## 清空(删除) 变量内容
LD_LIBRARY_PATH=

 

 

下载地址:

http://ftp.gnu.org/pub/gnu/libc/

解压: (注意,不要在有中文的路径下编译)

tar -zxf glibc-2.31.tar.gz 
cd glibc-2.31/

  注:注意版本号替换成你的

 新建目录:

mkdir build/  && cd build/ 

 配置安装路径:

../configure --prefix=/usr/local/glibc-2.31

  注:注意版本号替换成你的

  显示以下内容,执行成功:

configure: creating ./config.status
config.status: creating config.make
config.status: creating Makefile
config.status: creating config.h
config.status: executing default commands

  目录下也产生文件:

$ 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

编译:

sudo make -j4

   -j4 代表用4线程编译(加快编译速度),编译出错时,可以不加

 安装:

suod make install

 

复制 生成 so 文件

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 设置的安装路径

 

创建软件连接:

注意,要准备好启动盘或救援设备,再操作下面这步,修改失败系统可能会出问题!!!

注意,要准备好启动盘或救援设备,再操作下面这步,修改失败系统可能会出问题!!!

注意,要准备好启动盘或救援设备,再操作下面这步,修改失败系统可能会出问题!!!

 

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是强制覆盖

 

 

验证:

使用下面任意一条命令,查看替换完的版本

ldd --version 
或
strings /lib/x86_64-linux-gnu/libm.so.6 | grep GLIBC_

 

 


 

----------

错误提示:

  在 ../configure 时 ,

  提示: gawk 丢失或太旧,需要安装

configure: error: 
*** These critical programs are missing or too old: gawk bison
*** Check the INSTALL file for required versions.

 

     提示: makeinfo 版本警告,是 texinfo 需要安装

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 变量内容问题

configure: error: 
*** LD_LIBRARY_PATH shouldn't contain the current directory when
*** building glibc. Please change the environment variable
*** and run configure again.

 

  提示:注意,不要在有中文的路径下编

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

 

posted @ 2022-12-06 13:16  悟透  阅读(2339)  评论(0编辑  收藏  举报