Centos6.5升级glibc

教程大全 2026-01-08 10:02:19 浏览

注意更新系统库存在一定的风险, 请谨慎操作 默认的CentOs6.5 glibc版本最高为2.12, 而在进行Nodejs开发时项目所依赖的包往往需要更高版本的glibc库支持, 因此在不升级系统的前提下, 需要主动更新系统glibc库. 一般遇到错误 libc.so.6: version GLIBC_2.14 not found 时表示需要对glibc进行升级了.


glibc升级导致系统段错误问题解决方案

统:阿里云ECS CentOS6.5 当前GLIBC版本:2.12 准备升级GLIBC版本:2.19在升级Glibc至2.19时,遇到了系统段错误问题,以下为问题解决步骤。 一、Glibc介绍Glibc是GNU发布的libc库,是Linux系统中最底层的API,几乎任何运行库都会依赖于Glibc。 它除了封装Linux操作系统提供的系统服务外,还提供了许多必要的功能服务实现。 Glibc和内核不是同时开发的,因此需要兼容不同版本的内核,而内核也需要兼容不同版本的Glibc,这导致了双方都背负了太多的历史负担。 二、升级Glibc原因当前ECS上需要安装Nginx 1.15.9,由于编译的Nginx版本,发现Glibc库版本可能过低,为了确保Nginx正常运行,决定升级Glibc至2.19版本。 三、问题出现原因升级并编译Glibc后,需要在系统中指定库文件的路径,添加到/etc/.d/文件中,然后使用ldconfig -v将库文件生效加载,再将库文件中的.6做软连接至系统识别的路径。 然而,在这之后,无论执行任何命令,系统都显示段错误。 四、解决方案为了解决段错误问题,需要在其他相同配置的机器下,查看/lib64/.6文件,发现.6实际上是一个软连接文件。 这时,需要手动使用ldconfig链接原来的SO文件。 完成此操作后,系统恢复正常,不再显示段错误。 总结:Glibc是系统底层依赖的文件,自行编译升级可能会导致与内核版本不兼容的问题。 因此,建议使用yum进行升级,避免自行编译带来的麻烦。 在寻求技术提升的同时,欢迎工作一到五年的Java工程师加入Java程序员开发群。 群内提供免费的Java架构学习资料,包括高可用、高并发、高性能及分布式、JVM性能调优、Spring源码、MyBatis、Netty、Redis、Kafka、MySQL、Zookeeper、TOMCAT、Docker、Dubbo、Nginx等多个知识点的学习资源。 利用好每一分每一秒的时间,不断学习提升自己,避免以“没有时间”为借口掩饰懒惰。 趁年轻,努力学习,给未来的自己一个交代。

centos6.5安装wps提示缺libc.so.6(GLIBC_2.15)(64bit),怎办?

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

[ghui@StuOS bin]$ pwd

/var/VMdisks/cross/mingw32/bin

[ghui@StuOS bin]$ ls

[ghui@StuOS bin]$ ./qmake

./qmake: /lib64/.6: version `GLIBC_2.14 not found (required by ./qmake)

2.查看系统glibc支持的版本:

[ghui@StuOS bin]$ strings /lib64/.6 |grep GLIBC_

GLIBC_2.2.5

GLIBC_2.2.6

GLIBC_2.3.2

GLIBC_2.3.3

GLIBC_2.3.4

GLIBC_2.10

GLIBC_2.11

GLIBC_2.12

GLIBC_PRIVATE

[ghui@StuOS bin]$ RPM -qa |grep glibc

6_3.6.x86_64

6_3.6.x86_64

6_3.6.x86_64

6_3.6.x86_64

6_3.6.i686

6_3.6.i686

6_3.6.i686

6_3.6.x86_64

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

a. 到下载最新版本,我这里下载了 这个版本,解压到任意目录准备编译

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

[ghui@StuOS bin]$ cd /var/VMdisks/glibc-2.14/

[ghui@StuOS glibc-2.14]$ pwd

/var/VMdisks/glibc-2.14

[ghui@StuOS glibc-2.14]$ ls

aclocal.m4 -abis resource

aoutconfigure libidn rt

libio Rules

assert conformLICENSESscripts

Centos6.5升级glibc

CONFORMANCElocale setjmp

bitsCOPYINGlocaledata shadow

shlib-versions

build machsignal

CANCEL-FCT-WAIVEcrypt Makeconfig SOCket

CANCEL-FILE-WAIVE csuMakefilesoft-fp

catgetsctype -common

ChangeLog debug Makerules stdlib

ChangeLog.1direntmalloc streams

ChangeLog.10dlfcn manual string

ChangeLog.11elfmathsunrpc

miscsysdeps

NAMESPACE sysvipc

ChangeLog.14FAQNEWStermios

-skeleton.c

ChangeLog.16gmon NOTES time

ChangeLog.17gnulibnptltimezone

ChangeLog.2grpnptl_.c

ChangeLog.3gshadownscdversion.h

ChangeLog.5hurd wcsmbs

ChangeLog.6iconv po wctype

ChangeLog.7iconvdata posix WUR-REPORT

ChangeLog.8includePROJECTS

ChangeLog.9inet pwd

confINSTALLREADME

c.在glibc源码目录建立构建目录,并cd进入构建目录

[ghui@StuOS glibc-2.14]$ mkdir build

[ghui@StuOS glibc-2.14]$ cd build

d.运行configure配置,make && sudo make install

[ghui@StuOS build]$ ../configure --prefix=/opt/glibc-2.14

[ghui@StuOS build]$ make -j4

[ghui@StuOS build]$ sudo make install

[sudo] password for ghui:

4.临时修改环境变量

[ghui@StuOS bin]$ export LD_LIBRARY_PATH=/opt/glibc-2.14/lib:$LD_LIBRARY_PATH

[ghui@StuOS glibc-2.14]$ cd /var/VMdisks/cross/mingw32/bin/

[ghui@StuOS bin]$ ./qmake

Usage: ./qmake [mode] [options] [files]

QMake has two modes, one mode for generating project files based on

some heuristics, and the other for generating makefiles. Normally you

shouldnt need to specify a mode, as makefile generation is the DEFault

mode for qmake, but you may use this to test qmake on an existing project

linux ld.so.preload机制解析

解决了一个问题,如果对linux selinux有所了解,应能立即看出原因,但既然已分析,记录下来,也算学习与提升的过程。 问题出现在一个名为hook_的文件,利用/etc/配置,使每个进程加载此,实现特定目的。 在centos7上无问题,但centos6.5上配置后,ssh连接失败,手动重启sshd服务后报错。 初步判断为权限问题,但具体原因需从代码层面分析。 查看glibc版本为2.12,下载同版本源码,打开代码搜索cannot be preloaded,找到dl_catch_error函数报错点,但未打印errstring,仅打印笼统错误信息。 由于无法直接分析dl_catch_error函数,转向了解配置的工作机制。 进程创建通过fork和execve实现,fork调用sys_fork系统调用,复制父进程信息,设置内核栈,返回后调用execve。 execve调用sys_execve系统调用,主要功能为加载可执行的ELF文件。 load_elf_binary解析ELF文件,包含头部信息、Program header table和section信息等。 使用readelf查看可执行程序内容,重点关注INTERP和LOAD类型。 INTERP指定动态链接器路径,常为/lib64/.2;LOAD段包含要加载到内存运行的内容。 load_elf_binary解析INTERP内容,加载至地址空间。 通过readelf查看路径值,接着解析加载,最终返回值+interp_elf_ex.e_entry得到用户态入口虚拟地址。 在用户态,_start作为总入口,调用_dl_start,最终调用dl_main加载依赖文件。 dl_main在加载前,判断是否需要PRELOAD的文件,即/etc/配置的文件。 在2.12版本中,此路径由glibc代码写死。 解析/etc/,一行行读取,#号开头的行忽略,其余行调用do_preload加载文件。 在do_preload中,实际调用dl_catch_error报错,进一步分析map_doit、open_verify等函数,发现__open打开文件时即报错。 问题与sys_open源码中selinux权限检查相关。 关闭selinux后,问题解决。 如果使用selinux,可将文件放置于/lib64目录下,同样可以加载。

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐