学技术怎么能不会用服务器,阿里云服务器现8折优惠,还有更多优惠券限量发放
https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=7czske1k&utm_source=7czske1k

问题

服务器用的是centos 5.8,出现过几次libc.6.so的基础库在用yum安装软件时候链接被替换了,然后所有系统命令都不能使用了。提示如下图:

Linux许多命令都是依赖这个C语言的动态链接库,在centos里,这是一个软链,被替换后,被替换到新版本的动态库时,会出现这个问题。我这里是从版本2.5被换成了2.12(截图时已修复)。

原因

从google搜索到这样的答案:

The loader on your system does not support the new Linux ABI. Until relatively recently,Linux ELF binaries used the System V ABI. Recently,in support of STT_GNU_IFUNC,the Linux ABI was added. You would have to update your system C library to have a loader that support STT_GNU_IFUNC,and then it will also recognize ELF objects with the Linux ABI type.

也就是说系统版本的动态库加载器太旧了,不支持新版本的动态库,要嘛升级系统的加载器,要嘛恢复到旧的库。

用LD_PRELOAD修复

出现问题后所有几乎所有命令都不能使用,原因就是没办法加载那个新版本的动态库,而LD_PRELOAD环境变量则可以在运行命令前指定加载的动态库。

LD_PRELOAD 是这样的一个环境变量:它可以影响程序的运行时的链接(Runtime linker),它允许你定义在程序运行前优先加载的动态链接库。该功能主要就是用来有选择性的载入不同动态链接库中的相同函数。通过这个环境变量,我们 可以在主程序和其动态链接库的中间加载别的动态链接库,甚至覆盖正常的函数库。

执行如下命令,直接就可以恢复了。不过执行命令的必需是有root权限的用,sudo命令还是用不了的(可能还要加载其他动态库)。

root# LD_PRELOAD=/lib64/libc-2.5.so ln -sf /lib64/libc-2.5.so /lib64/libc.6.so

用sln命令修复

应该很多人都不知道这个命令,这个命令在/sbin/目录下,man的描述是这样的。

sln symbolically links dest to source. It is statically linked,needing no
dynamic linking at all. Thus sln is useful to make symbolic links to dynamic
libraries if the dynamic linking system for some reason is nonfunctional.

看起来就是为了修复动态库的问题而做的,它是一个静态链接生成的命令,不依赖任何的动态库,使用用方法跟ln是一样的。

root# /sbin/sln -sf /lib64/libc-2.5.so /lib64/libc.6.so

关于loader

老外对这个问题的回答有一句是这样的:

Ah,I didn’t realize you had replaced the system C library without also replacing the loader,or I would have been more specific in my advice.

也就是,要升级libc.6.so要同时升级动态库的loader。看了一下我系统上的ld动态库版本也是2.5,可能要升级libc.6.so就要将ld升级到同样的版本。这边系统恢复了,不敢再去动,没有再做尝试,以后遇到再补充。

centos libc.6.so 链接出错的更多相关文章

  1. xcode – 如何正确设置运行路径,搜索路径和安装名称?

    任何人对我可能做错了什么有什么想法?

  2. ios – OS X:将.dylib转换为.a / .o(动态到静态)?

    假设我已经阅读了thiscaveat,我仍然希望将TBB用作静态链接库.但我真的不想重写TBBmakefile来生成libtbb.a而不是libtbb.dylib.是否有一个简单的命令行方式将libtbb.dylib转换为libtbb.o并使用相同的入口点?

  3. 如何在iOS上使用嵌入式专用框架和应用程序中的静态库

    在私有框架,应用程序和扩展中使用静态库中的类的正确方法是什么?

  4. Swift vs Objective-C:未来看好 Swift 的十个理由

    Swift将Objective-C头文件(.h)和实现文件(.m)合并成了一个代码文件。程序员在Objective-C上会遇到的大量内存溢出问题在Swift上是不可能的。在Objective-C中,使用文本字符串将两块信息组合起来的操作非常繁琐。Swift采用当代编程语言的特性,比如使用“+”操作符将两个字符串加到一起,这在Objective-C中是没有。

  5. Swift学习笔记之公用库和模块化

    静态库和动态库先补充一下静态库和动态库的知识。静态库静态库的代码追加到可执行文件内,被多次使用就有多份冗余拷。iOS中静态库的形式是.a和.framework。不过各个应用所使用的自己的公用库,最终都需要link进可执行文件,所以本质上还是一个静态库。现状出于安全层面的考虑,AppStore不允许使用第三方的动态链接库。我们可以通过framework编写自己的公用库。iOS-Universal-Framework也宣布停止更新。模块模块化是在2012年的LLVMDevelopersMeeting中提出的。

  6. Swift vs. Objective-C:未来看好 Swift 的十个理由

    Swift将Objective-C头文件(.h)和实现文件(.m)合并成了一个代码文件。程序员在Objective-C上会遇到的大量内存溢出问题在Swift上是不可能的。在Objective-C中,使用文本字符串将两块信息组合起来的操作非常繁琐。Swift采用当代编程语言的特性,比如使用“+”操作符将两个字符串加到一起,这在Objective-C中是没有。

  7. Swift 创建framework并应用到项目中

    iOS8已经开放了动态库的权限。创建动态库并能运用到兼容iOS7的项目中!Carthage&CocoaPods0.36对Swift也仅以Framework的方式来支持。更多参见:LibraryvsFrameworkiniOSSwift不在支持静态库,这也就间接放弃了iOS7。Framework就是一个Bundle,将所有的资源(nib,Images,Fonts…理论上动态库可以单独更新,只是在iOS上Apple未开放这样的权限。创建Framework项目CodingtheFrameworkAccessle

  8. Project Perfect让Swift在服务器端跑起来-在Linux上创建你的Perfect项目(三)

    前两篇,分别讲述了入门和在Linux下部署,现在得说说如何在Linux下开发了。在Linux下开发,相对比在Mac下开发更灵活。我们先来看看构建基于Perfect的网站服务的编译方式如图通过引用基础库PerfectLib和数据链接,中间件模块创建你的网页文件,并用makefile打包生成你的网站动态库。所以如果你只是在Linux下构建项目,你只需要先创建好你的Handlers.swift即可。根据上面的方式我们开始在Linux下创建我们的Perfect项目。这里我在Perfect文件夹创建了一个Demo文

  9. Project Perfect让Swift在服务器端跑起来-在Linux上创建你的Perfect项

    前两篇,分别讲述了入门和在Linux下部署,现在得说说如何在Linux下开发了。在Linux下开发,相对比在Mac下开发更灵活。我们先来看看构建基于Perfect的网站服务的编译方式如图通过引用基础库PerfectLib和数据链接,中间件模块创建你的网页文件,并用makefile打包生成你的网站动态库。所以如果你只是在Linux下构建项目,你只需要先创建好你的Handlers.Swift即可。根据上面的方式我们开始在Linux下创建我们的Perfect项目。

  10. Swift vs. Objective-C:未来看好Swift的十个理由

    Swift将Objective-C头文件(.h)和实现文件(.m)合并成了一个代码文件。程序员在Objective-C上会遇到的大量内存溢出问题在Swift上是不可能的。在Objective-C中,使用文本字符串将两块信息组合起来的操作非常繁琐。Swift采用当代编程语言的特性,比如使用“+”操作符将两个字符串加到一起,这在Objective-C中是没有。

随机推荐

  1. 在airgapped(离线)CentOS 6系统上安装yum软件包

    我有一个CentOS6系统,出于安全考虑,它已经被空气泄漏.它可能从未连接到互联网,如果有,它很长时间没有更新.我想将所有.rpm软件包放在一个驱动器上,这样它们就可以脱机安装而无需查询互联网.但是,我在测试VM上遇到的问题是,即使指定了本地路径,yum仍然会挂起并尝试从在线存储库进行更新.另外,有没有办法使用yum-utils/yumdownloader轻松获取该包的所有依赖项和所有依赖项?目前

  2. centos – 命名在日志旋转后停止记录到rsyslog

    CentOS6.2,绑定9.7.3,rsyslog4.6.2我最近设置了一个服务器,我注意到在日志轮换后,named已停止记录到/var/log/messages.我认为这很奇怪,因为所有日志记录都是通过rsyslog进行的,并且named不会直接写入日志文件.这更奇怪,因为我在更新区域文件后命名了HUPed,但它仍然没有记录.在我停止并重新启动命名后,记录恢复.这里发生了什么?

  3. centos – 显示错误的磁盘大小

    对于其中一个磁盘,Df-h在我的服务器上显示错误的空白区域:Cpanel表明它只有34GB免费,但还有更多.几分钟前,我删除了超过80GB的日志文件.所以,我确信它完全错了.fdisk-l/dev/sda2也显示错误:如果没有格式化,我该怎么做才能解决这个问题?并且打开文件描述符就是它需要使用才能做到这一点.所以…使用“lsof”并查找已删除的文件.重新启动写入日志文件的服务,你很可能会看到空间可用.

  4. 如何在centos 6.9上安装docker-ce 17?

    我目前正在尝试在centOS6.9服务器上安装docker-ce17,但是,当运行yuminstalldocker-ce时,我收到以下错误:如果我用跳过的标志运行它我仍然得到相同的消息,有没有人知道这方面的方法?

  5. centos – 闲置工作站的异常负载平均值

    我有一个新的工作站,具有不寻常的高负载平均值.机器规格是:>至强cpu>256GB的RAM>4x512GBSSD连接到LSI2108RAID控制器我从livecd安装了CentOS6.564位,配置了分区,网络,用户/组,并安装了一些软件,如开发工具和MATLAB.在启动几分钟后,工作站负载平均值的值介于0.5到0.9之间.但它没有做任何事情.因此我无法理解为什么负载平均值如此之高.你能帮我诊断一下这个问题吗?

  6. centos – Cryptsetup luks – 检查内核是否支持aes-xts-plain64密码

    我在CentOS5上使用cryptsetupluks加密加密了一堆硬盘.一切都很好,直到我将系统升级到CentOS6.现在我再也无法安装磁盘了.使用我的关键短语装载:我收到此错误:在/var/log/messages中:有关如何装载的任何想法?找到解决方案问题是驱动器使用大约512个字符长的交互式关键短语加密.出于某种原因,CentOS6中的新内核模块在由旧版本创建时无法正确读取512个字符的加密密钥.似乎只会影响内核或cryptsetup的不同版本,因为在同一系统上创建和打开时,512字符的密钥将起作用

  7. centos – 大量ssh登录尝试

    22个我今天登录CentOS盒找到以下内容这是过去3天内的11次登录尝试.WTF?请注意,这是我从我的提供商处获得的全新IP,该盒子是全新的.我还没有发布任何关于此框的内容.为什么我会进行如此大量的登录尝试?是某种IP/端口扫描?基本上有4名匪徒,其中2名来自中国,1名来自香港,1名来自Verizon.这只发生在SSH上.HTTP上没有问题.我应该将罪魁祸首子网路由吗?你们有什么建议?

  8. centos – kswap使用100%的CPU,即使有100GB的RAM也可用

    >Linux内核是否应该足够智能,只需从内存中清除旧缓存页而不是启动kswap?

  9. centos – Azure将VM从A2 / 3调整为DS2 v2

    我正在尝试调整前一段时间创建的几个AzureVM,从基本的A3和标准A3到标准的DS2v2.我似乎没有能力调整到这个大小的VM.必须从头开始重建服务器会有点痛苦.如果它有所不同我在VM中运行CentOS,每个都有一个带有应用程序和操作系统的磁盘.任何人都可以告诉我是否可以在不删除磁盘的情况下删除VM,创建新VM然后将磁盘附加到新VM?

  10. centos – 广泛使用RAM时服务器计算速度减慢

    我在非常具体的情况下遇到服务器速度下降的问题.事实是:>1)我使用计算应用WRF>2)我使用双XeonE5-2620v3和128GBRAM(NUMA架构–可能与问题有关!

返回
顶部