升级glibc

本文详细介绍了如何解决 CentOS 6.3 系统中 glibc 版本过低导致的 qmake 编译错误。通过下载并编译更高版本的 glibc,最终成功解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0.以下在系统CentOS 6.3 x86_64上操作

1.试图运行程序,提示"libc.so.6: version `GLIBC_2.14' not found",原因是系统的glibc版本太低,软件编译时使用了较高版本的glibc引起的:

  1. [ghui@StuOS bin]$ pwd  
  2. /var/VMdisks/cross/mingw32/bin  
  3. [ghui@StuOS bin]$ ls  
  4. lrelease     QtCore4.dll         QtNetwork4.dll      QtSql4.dll     QtXml4.dll  
  5. moc          QtDeclarative4.dll  QtOpenGL4.dll       QtSvg4.dll     rcc  
  6. phonon4.dll  QtGui4.dll          QtScript4.dll       QtTest4.dll    uic  
  7. qmake        QtMultimedia4.dll   QtScriptTools4.dll  QtWebKit4.dll  
  8. [ghui@StuOS bin]$ ./qmake   
  9. ./qmake: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by ./qmake)  


2.查看系统glibc支持的版本:
  1. [ghui@StuOS bin]$ strings /lib64/libc.so.6 |grep GLIBC_  
  2. GLIBC_2.2.5  
  3. GLIBC_2.2.6  
  4. GLIBC_2.3  
  5. GLIBC_2.3.2  
  6. GLIBC_2.3.3  
  7. GLIBC_2.3.4  
  8. GLIBC_2.4  
  9. GLIBC_2.5  
  10. GLIBC_2.6  
  11. GLIBC_2.7  
  12. GLIBC_2.8  
  13. GLIBC_2.9  
  14. GLIBC_2.10  
  15. GLIBC_2.11  
  16. GLIBC_2.12  
  17. GLIBC_PRIVATE  
  1. [ghui@StuOS bin]$ rpm -qa |grep glibc  
  2. glibc-static-2.12-1.80.el6_3.6.x86_64  
  3. glibc-headers-2.12-1.80.el6_3.6.x86_64  
  4. glibc-common-2.12-1.80.el6_3.6.x86_64  
  5. glibc-devel-2.12-1.80.el6_3.6.x86_64  
  6. glibc-static-2.12-1.80.el6_3.6.i686  
  7. glibc-devel-2.12-1.80.el6_3.6.i686  
  8. glibc-2.12-1.80.el6_3.6.i686  
  9. glibc-2.12-1.80.el6_3.6.x86_64  

3.可以看到最高只支持2.12版本,所以考虑编译解决这个问题:

       a. 到 http://www.gnu.org/software/libc/下载最新版本,我这里下载了 glibc-2.14.tar.xz 这个版本,解压到任意目录准备编译

       b.这里解压到/var/VMdisks/glibc-2.14/

  1. [ghui@StuOS bin]$ cd /var/VMdisks/glibc-2.14/  
  2. [ghui@StuOS glibc-2.14]$ pwd  
  3. /var/VMdisks/glibc-2.14  
  4. [ghui@StuOS glibc-2.14]$ ls  
  5. abilist            config.h.in           intl           README.libm  
  6. abi-tags           config.log            io             resolv  
  7. aclocal.m4         config.make.in        libc-abis      resource  
  8. aout               configure             libidn         rt  
  9. argp               configure.in          libio          Rules  
  10. assert             conform               LICENSES       scripts  
  11. autom4te.cache     CONFORMANCE           locale         setjmp  
  12. bits               COPYING               localedata     shadow  
  13. BUGS               COPYING.LIB           login          shlib-versions  
  14. build              cppflags-iterator.mk  mach           signal  
  15. CANCEL-FCT-WAIVE   crypt                 Makeconfig     socket  
  16. CANCEL-FILE-WAIVE  csu                   Makefile       soft-fp  
  17. catgets            ctype                 Makefile.in    stdio-common  
  18. ChangeLog          debug                 Makerules      stdlib  
  19. ChangeLog.1        dirent                malloc         streams  
  20. ChangeLog.10       dlfcn                 manual         string  
  21. ChangeLog.11       elf                   math           sunrpc  
  22. ChangeLog.12       extra-lib.mk          misc           sysdeps  
  23. ChangeLog.13       extra-modules.mk      NAMESPACE      sysvipc  
  24. ChangeLog.14       FAQ                   NEWS           termios  
  25. ChangeLog.15       FAQ.in                nis            test-skeleton.c  
  26. ChangeLog.16       gmon                  NOTES          time  
  27. ChangeLog.17       gnulib                nptl           timezone  
  28. ChangeLog.2        grp                   nptl_db        tls.make.c  
  29. ChangeLog.3        gshadow               nscd           version.h  
  30. ChangeLog.4        hesiod                nss            Versions.def  
  31. ChangeLog.5        hurd                  o-iterator.mk  wcsmbs  
  32. ChangeLog.6        iconv                 po             wctype  
  33. ChangeLog.7        iconvdata             posix          WUR-REPORT  
  34. ChangeLog.8        include               PROJECTS  
  35. ChangeLog.9        inet                  pwd  
  36. conf               INSTALL               README  

      c.在glibc源码目录建立构建目录,并cd进入构建目录
  1. [ghui@StuOS glibc-2.14]$ mkdir build  
  1. [ghui@StuOS glibc-2.14]$ cd build  

    d.运行configure配置,make && sudo  make install
  1. [ghui@StuOS build]$ ../configure --prefix=/opt/glibc-2.14  
  2. [ghui@StuOS build]$ make -j4   
  3. [ghui@StuOS build]$ sudo make install  
  4. [sudo] password for ghui:   

4.临时修改环境变量
  1. [ghui@StuOS bin]$ export LD_LIBRARY_PATH=/opt/glibc-2.14/lib:$LD_LIBRARY_PATH  
  1. [ghui@StuOS glibc-2.14]$ cd /var/VMdisks/cross/mingw32/bin/  

  1. [ghui@StuOS bin]$ ./qmake   
  2. Usage: ./qmake [mode] [options] [files]  
  3.   
  4. QMake has two modes, one mode for generating project files based on  
  5. some heuristics, and the other for generating makefiles. Normally you  
  6. shouldn't need to specify a mode, as makefile generation is the default  
  7. mode for qmake, but you may use this to test qmake on an existing project  
  8. ...  


此时运行正常,问题解决。


<think>好的,我现在需要帮助用户解决如何在Linux中安全升级GLIBC的问题。首先,我得回想一下自己之前学过的关于GLIBC升级的知识,以及相关的步骤和注意事项。 首先,用户提到了参考内容中的引用[1]和[2],里面提到了升级glibc 2.25.90版本,以及升级过程中需要处理Python、make、gcc等依赖。这说明升级GLIBC并不是一个简单的过程,可能需要先更新其他工具链的组件。我需要确认这些依赖是否必须,以及正确的升级顺序。 接下来,我需要考虑用户的环境。用户提供的系统信息是Ubuntu 14.04,内核版本3.19.0-25-generic,这是一个较旧的版本。升级GLIBC可能会影响系统稳定性,特别是如果系统中有很多依赖于旧版本glibc的应用程序。因此,安全升级的关键在于不破坏现有环境,可能需要使用chroot或容器技术,或者在测试环境中进行。 然后,按照引用[2]中的步骤,升级过程包括下载软件包、解压、检查依赖、升级Python、make、gcc,然后编译安装新版本的glibc。但需要验证这些步骤是否正确,是否存在潜在问题。例如,升级gcc可能需要先安装较新版本的编译器,而编译glibc可能需要特定的配置选项,比如--prefix=/usr,这可能会覆盖系统原有的文件,导致系统无法启动。因此,是否应该将新版本的glibc安装到单独的目录,并通过环境变量如LD_LIBRARY_PATH来引用?或者使用符号链接?但这样可能有风险。 另外,用户提到的“安全,高效,优雅”的方法,可能需要使用非侵入式的方式,比如在容器中安装新版本,或者使用动态链接库的路径来加载新版本,而不替换系统默认的glibc。例如,使用patchelf工具修改可执行文件的库路径,但这可能比较复杂。 还要注意,编译glibc需要满足其构建依赖,比如GNU make、bison等,这些是否已经安装?用户是否需要先安装这些工具? 在步骤中,可能需要详细说明每个步骤的具体操作,例如如何下载正确的glibc版本,如何配置编译选项,如何运行make install,以及安装后的验证步骤,如运行ldd --version或检查/lib/x86_64-linux-gnu/libc.so.6。 此外,用户可能需要了解如何回滚,如果在升级后出现系统问题,如何恢复原来的glibc版本。这可能需要备份原有的库文件,或者在安装时保留旧版本,但实际操作中可能困难,因为glibc是核心库,一旦替换可能无法轻易回退。 另外,是否建议用户直接升级整个系统到更新的Ubuntu版本,比如16.04或18.04,因为这些版本可能已经包含了较新的glibc,从而避免手动升级的风险?这可能是一个更安全高效的方法,但用户可能因为某些原因不能升级系统,所以需要提供手动升级的方法。 最后,生成的相关问题需要围绕升级GLIBC的注意事项、依赖管理、验证步骤以及替代方案等方面展开,帮助用户全面理解可能遇到的问题和解决方案。</think>### 如何在Linux中安全升级GLIBC版本 GLIBC(GNU C Library)是Linux系统的核心库,直接升级存在较高风险。以下为**安全升级步骤**及注意事项: --- #### **一、准备工作** 1. **备份系统** 使用`rsync`或创建快照,避免升级失败导致系统无法启动[^2]。 2. **检查当前版本** ```bash ldd --version ``` 输出示例:`ldd (Ubuntu GLIBC 2.19-0ubuntu6) 2.19` 3. **下载GLIBC源码** 从[官方仓库](https://www.gnu.org/software/libc/)下载稳定版本(如2.35),避免使用开发版[^1]。 --- #### **二、解决依赖问题** GLIBC编译依赖较新的工具链: 1. **升级Python** - 下载Python 3.7+源码,配置时指定独立路径(如`/opt/python3.7`),避免覆盖系统默认版本[^2]。 - 编译命令: ```bash ./configure --prefix=/opt/python3.7 make && sudo make install ``` 2. **升级GCC** - 下载GCC 6+源码,编译时使用`--disable-multilib`减少兼容性问题: ```bash ./configure --disable-multilib --prefix=/opt/gcc-12 make && sudo make install ``` - 更新环境变量: ```bash export PATH=/opt/gcc-12/bin:$PATH export LD_LIBRARY_PATH=/opt/gcc-12/lib64:$LD_LIBRARY_PATH ``` --- #### **三、编译安装GLIBC** 1. **解压并配置** ```bash tar -xzvf glibc-2.35.tar.gz cd glibc-2.35 mkdir build && cd build ../configure --prefix=/usr --disable-profile ``` - `--prefix=/usr`:覆盖系统路径(高风险!建议测试环境操作) - 或使用独立路径(如`/opt/glibc-2.35`) 2. **编译与安装** ```bash make -j$(nproc) sudo make install ``` 3. **验证安装** ```bash /lib/x86_64-linux-gnu/libc.so.6 | grep "GNU C Library" ``` --- #### **四、安全建议** 1. **使用容器隔离** 通过Docker或LXC部署新GLIBC环境,避免污染宿主机[^2]。 2. **回滚方案** 保留旧版本动态库,通过`LD_PRELOAD`临时切换: ```bash export LD_PRELOAD=/old/glibc/path/libc.so.6 ``` --- #### **五、替代方案** - **升级Linux发行版** Ubuntu 20.04+默认提供GLIBC 2.31+,避免手动升级风险。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值