本文撰写于 2020年 7 月 3 日激情电影,写这篇著述的时期还相频年青,可能含有荒诞。标题中的正确是相对与我参考的荒诞著述 [某著述教我用 fedora29 的 rpm 包去升级 centos7 的 glibc,于是我的系统挂了]。不代表这是最好操作表情,请明察。也不错参考在非圭臬位置装配 Glibc:https://serverfault.com/a/894689
请确保您有才能在系统损坏后调停您的系统!
不到万不得已,你不应该使用不撑捏的表情升级系统底层包。
Glibc 不能用会导致:bash 无法使用、yum/rpm 无法使用、无法领会称呼空间、无法切换用户等,基本很是于系统不能用。
不应该在出产环境作念此类操作。卓绝是升级这种系统底层组件。
不要装配不属于你系统的 RPM 包。
更新完必定会有某些东西有荒诞。
glibc 是 GNU 发布的 libc 库,即 c 运行库。glibc 是 linux 系统中最底层的 api,险些其它任何运行库齐会依赖于glibc。glibc除了封装 linux 操作系统所提供的系统业绩外,它自己也提供了很多其它一些必邀功能业绩的杀青。由于 glibc 囊括了险些扫数的 UNIX 通行的圭臬,不错思见其本体包罗万象。而就像其他的 UNIX 系结伙样,其内含的档案群散布于系统的树状目次结构中,像一个支架一般撑起悉数操作系统。在 GNU/Linux 系统中,其 C 函数库发展史点出了GNU/Linux 演进的几个遑急里程碑,用 glibc 动作系统的 C 函式库,是 GNU/Linux 演进的一个遑急里程碑。-------摘自百毒百科
荒诞的升级 Glibc 或 Glibc 损坏会毁了你的操作系统! 那么怎样正确在 Centos7 升级 Glibc 呢保举全程在 screen 中运行,细情偶然断开酿成不能预思的效果。底下扫数组件齐是撰写本文 2020/7/3 时的最新版,笔据您的需要替换。以下通盘操作齐是用 root 账户进行的。
升级 GNU Make 与 GCC,装配 Python3高于 Glibc 2.4 的版块需要比 Centos7 自带的 make 和 GCC 更高的版块。INSTALL 文献里面有写,这里精简一下:
9912345678910Recommended Tools for Compilation=================================We recommend installing the following GNU tools before attempting tobuild the GNU C Library: * GNU 'make' 4.0 or newer * GCC 6.2 or newer * Python 3.4 or later * GDB 7.8 or later with support for Python 2.7/3.4 or later若是你只思升级到 Glibc 2.24 则不错跳过此期间。
1.升级GNU Make 4.391wget https://ftp.gnu.org/gnu/make/make-4.3.tar.gz 91wget https://mirrors.aliyun.com/gnu/make/make-4.3.tar.gz 从官方或阿里云的镜像下载,中国大陆从官方下载太慢; 91tar -xvf make-4.3.tar.gz 解压; 91cd make-4.3 迁移到文献夹; 91mkdir build && cd build 创建编译文献夹并迁移; 91../configure 跨上一级文献夹编译器配置; 91make -j24 运转编译; -j数值代表编译线程,您不错笔据您的处理器中枢来决定使用若主线程,如 -j8 ; -j 则为不甘休线程,但可能导致荒诞; 91make install 装配; 91make --v 考证版块;
若是无偶但是会输出:激情电影
9123456GNU Make 4.3Built for x86_64-pc-linux-gnuCopyright (C) 1988-2020 Free Software Foundation, Inc.License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>This is free software: you are free to change and redistribute it.There is NO WARRANTY, to the extent permitted by law.至此升级 make 完成。
2.升级 GCC 10.1.0 91wget https://ftp.gnu.org/gnu/gcc/gcc-10.1.0/gcc-10.1.0.tar.gz 91wget https://mirrors.aliyun.com/gnu/gcc/gcc-10.1.0/gcc-10.1.0.tar.gz 从官方或阿里云的镜像下载,中国大陆从官方下载太慢; 91tar -xvf gcc-10.1.0.tar.gz 解压; 91cd gcc-10.1.0 迁移到文献夹; 91./contrib/download_prerequisites 下载依赖包; 91mkdir build && cd build 创建编译文献夹并迁移; 91mkdir /usr/local/gcc-10.1.0 创建装配文献夹; 91../configure --prefix=/usr/local/gcc-10.1.0 --enable-checking=release --enable-languages=c,c++ --disable-multilib ../configure 跨上一级文献夹编译器配置; --prefix=/usr/local/gcc-10.1.0 指定装配目次; --enable-checking=release 在编译器中实行里面一致性检查; --enable-languages=c,c++ 指定撑捏的讲话; --disable-multilib 辞谢编译适用于多重架构体系的库,即是 X86 X64 兼容之类的; 91make -j24 运转编译; -j数值代表编译线程,您不错笔据您的处理器中枢来决定使用若主线程,如 -j8; -j 则为不甘休线程,但可能导致荒诞; 91make install 装配; 91export PATH=/usr/local/gcc-10.1.0/bin:$PATH 树立为默许编译器,仅对刻下会话灵验; 长久启用后文会提到; 91vim ~/.bashrc 剪辑刻下用户的 .bashrc 文献,虽然你也不错写到全局配置文献;在临了一转加入 export PATH=/usr/local/gcc-10.1.0/bin:$PATH 并保存。
91source ~/.bashrc 让配置成效; 91cd /usr/lib64 迁移到 /lib64 目次; 91rm -rf libstdc++.so.6 删除老版块的 libstc++ 软集会,使用 rm -rf 删软集会的时期千万不要在背面加 /; 91ln -s /usr/local/gcc-10.1.0/lib64/libstdc++.so.6.0.28 libstdc++.so.6 把新的 libstc++ 软集会到系统库然后我忽视你在需要的时期流畅回老版块,因为之后可能会际遇 lib64/libstdc++.so.6: undefined symbol: libiconv这么的荒诞,导致 yum 不能用之类的问题。
连回老版块的要领:
9123cd /lib64rm -rf libstdc++.so.6ln -s libstdc++.so.6.0.19 libstdc++.so.6 91gcc -v 检查新的 GCC 是不是成效了若是无偶但是会输出
912345678使用内建 specs。COLLECT_GCC=gccCOLLECT_LTO_WRAPPER=/usr/local/gcc-10.1.0/libexec/gcc/x86_64-pc-linux-gnu/10.1.0/lto-wrapper打算:x86_64-pc-linux-gnu配置为:../configure --prefix=/usr/local/gcc-10.1.0 --enable-checking=release --enable-languages=c,c++ --disable-multilib线程模子:posixSupported LTO compression algorithms: zlibgcc 版块 10.1.0 (GCC) 91strings /usr/lib64/libstdc++.so.6 | grep 'CXXABI' 检查新的 libstc++ 是不是成效了若是无偶但是会输出
99123456789101112131415161718192021222324252627282930CXXABI_1.3CXXABI_1.3.1CXXABI_1.3.2CXXABI_1.3.3CXXABI_1.3.4CXXABI_1.3.5CXXABI_1.3.6CXXABI_1.3.7CXXABI_1.3.8CXXABI_1.3.9CXXABI_1.3.10CXXABI_1.3.11CXXABI_1.3.12CXXABI_TM_1CXXABI_FLOAT128CXXABI_1.3CXXABI_1.3.11CXXABI_1.3.2CXXABI_1.3.6CXXABI_FLOAT128CXXABI_1.3.12CXXABI_1.3.9CXXABI_1.3.1CXXABI_1.3.5CXXABI_1.3.8CXXABI_1.3.4CXXABI_TM_1CXXABI_1.3.7CXXABI_1.3.10CXXABI_1.3.3至此升级 GCC 完成。
3.装配Python3这个略了。
升级 Glibc 2.31 91wget https://ftp.gnu.org/gnu/glibc/glibc-2.31.tar.gz 91wget https://mirrors.aliyun.com/gnu/glibc/glibc-2.31.tar.gz 从官方或阿里云的镜像下载,中国大陆从官方下载太慢; 91234tar -xvf glibc-2.31.tar.gzcd glibc-2.31mkdir buildcd build 上头讲解过了; 91../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin ../configure 跨上一级文献夹编译器配置; 不要改 --prefix=/usr ; --prefix=/usr 指定装配目次; --disable-profile 关掉 profiling 信息干系的库文献编译; --enable-add-ons 带领 glibc 使用附加的 NPTL 包动作线程库; --with-headers=/usr/include 带领 glibc 按照这个目次中的内核头文献编译我方,从而精准的知说念内核的特质以笔据这些特质对我方进行最好化编译; --with-binutils=/usr/bin 保证在编译 glibc 时不会用错 Binutils; 91make -j24 运转编译; -j数值代表编译线程,您不错笔据您的处理器中枢来决定使用若主线程,如 -j8; -j 则为不甘休线程,但可能导致荒诞; 91make install 装配;这一步可能会出现
9912345678910111213141516Execution of gcc -B/usr/bin/ failed!The script has found some problems with your installation!Please read the FAQ and the README file and check the following:- Did you change the gcc specs file (necessary after upgrading from Linux libc5)?- Are there any symbolic links of the form libXXX.so to old libraries? Links like libm.so -> libm.so.5 (where libm.so.5 is an old library) are wrong, libm.so should point to the newly installed glibc file - and there should be only one such link (check e.g. /lib and /usr/lib)You should restart this script from your build directory after you'vefixed all problems!Btw. the script doesn't work if you're installing GNU libc not as yourprimary library!make[1]: *** [Makefile:120: install] Error 1 make[1]: Leaving directory '/root/glibc-2.31' make: *** [Makefile:12: install] Error 2搜索此本体,得出的扫尾是八成毋庸管(?)
不释怀的不错检测一下 libm.so
91ls -l /usr/lib64/libm.so.6没特偶然即是如故集会到新版块了,如下
91lrwxrwxrwx 1 root root 12 Jul 3 02:32 /usr/lib64/libm.so.6 -> libm-2.31.so然后再次尝试装配如故报错,不太懂。底下的检测看起来如故是装配告捷了,系统/表率也莫得异样。
91ls -l /lib64/libc.so.6 检测是否如故装配,检查软集会;出现
91lrwxrwxrwx 1 root root 12 Jul 3 02:32 /lib64/libc.so.6 -> libc-2.31.so即为告捷
萝莉 胜利女神:nikke 91strings /lib64/libc.so.6 | grep GLIBC 再次考证若是无偶但是会输出
9912345678910111213141516171819202122232425262728293031GLIBC_2.2.5GLIBC_2.2.6GLIBC_2.3GLIBC_2.3.2GLIBC_2.3.3GLIBC_2.3.4GLIBC_2.4GLIBC_2.5GLIBC_2.6GLIBC_2.7GLIBC_2.8GLIBC_2.9GLIBC_2.10GLIBC_2.11GLIBC_2.12GLIBC_2.13GLIBC_2.14GLIBC_2.15GLIBC_2.16GLIBC_2.17GLIBC_2.18GLIBC_2.22GLIBC_2.23GLIBC_2.24GLIBC_2.25GLIBC_2.26GLIBC_2.27GLIBC_2.28GLIBC_2.29GLIBC_2.30GLIBC_PRIVATE为什么莫得 2.31,我也不知说念。
更新完可能会有的荒诞更新完必定会有荒诞,这即是代价。
若是你运行 locale 呐喊报错的话,或者汉文或其他讲话变成了?????????那么你需要
91cd glibc-2.31/build 迁移到编译 Glibc 的目次; 91make localedata/install-locales 编译讲话文献; 91make install 再装配一次;然后你的汉文或是其他讲话应该就不会????????了
际遇 lib64/libstdc++.so.6: undefined symbol: libiconv这个原因是 libstdc++ 版块不匹配。处分要领:把 libstdc++ 的软集会改回老版块这个问题应该是常常出现,比如 yum 什么的,多备着吧。
9123cd /lib64rm -rf libstdc++.so.6ln -s libstdc++.so.6.0.19 libstdc++.so.6 际遇 Error: /usr/lib64/libstdc++.so.6: version `CXXABI_1.3.*' not found这个原因是 libstdc++ 版块不够新,处分要领:把 libstdc++ 的软集会改成新版块
最初找到你的gcc源码编译文献夹,比如我的在/root/gcc-10.1.0/
912cd /root/gcc-10.1.0/build/x86_64-pc-linux-gnu/libstdc++-v3/src/.libscp libstdc++.so.6.0.28 /usr/lib64/ 把最新的 libstdc++.so.6 复制到 /usr/lib64/ 9123cd /usr/lib64rm -rf libstdc++.so.6ln -s libstdc++.so.6.0.28 libstdc++.so.6 rm -rf libstdc++.so.6 删除老的软集会; ln -s libstdc++.so.6.0.28 libstdc++.so.6 把 libstdc++.so.6.0.28 软集会到 libstdc++.so.6; 更新完若是你的 yum 无任何反馈可能是因为 rpm 数据库有问题导致卡死
9123rm -f /var/lib/rpm/__db.00*rpm --rebuilddbyum clean all rm -f /var/lib/rpm/__db.00* 删除 rpm 数据库文献; rpm --rebuilddb 重建 rpm数据库; yum clean all 算帐可能的缓存;然后你的 yum 应该能用了激情电影
大功顺利 本站仅提供存储业绩,扫数本体均由用户发布,如发现存害或侵权本体,请点击举报。