几乎没有命令工作 - 重定位错误:符号 __getrlimit,libc.so.6 中未定义版本 GLIBC_PRIVATE

dev*_*150 5 linux libraries segmentation-fault

我通过 SSH 连接到我没有 root 访问权限的机器。为了安装我从我的机器上传的库并将它们放在~/lib远程主机的目录中。

现在,对于我运行的几乎所有命令,我都会收到以下错误(例如 for ls)或一条Segmentation fault (core dumped)消息。

ls: relocation error: /lib/libpthread.so.0: symbol __getrlimit, version 
GLIBC_PRIVATE not defined in file libc.so.6 with link time reference
Run Code Online (Sandbox Code Playgroud)

唯一的命令,我已经成功运行是cdpwd直到现在。通过使用 TAB 自动完成ls,我几乎可以在目录中找到文件,因此我可以在目录中移动。

uname -r也返回Segmentation fault (core dumped)消息,所以我不确定我使用的是什么内核版本。

Ste*_*itt 26

由于您可以登录,因此没有任何重大问题;大概是您的 shell 的启动脚本添加~/libLD_LIBRARY_PATH,以及 中的坏库~/lib,这就是导致您看到的问题的原因。

要解决此问题,请运行

unset LD_LIBRARY_PATH
Run Code Online (Sandbox Code Playgroud)

这将允许您运行rmvim等等。如果合适的话,除去麻烦库和编辑你的启动脚本。


Phi*_*all 24

问题是您已将 的副本glibc放入~/lib目录,而该库与您将其上传到的系统不兼容。正在按照~/lib中指定的方式引用该库$LD_LIBRARY_PATH

要临时解决此问题,只需unset LD_LIBRARY_PATH- 这将像unset内置的 shell一样工作。然后,您将能够运行您最喜欢的文本编辑器,以删除启动文件中首先设置变量的任何内容。

  • OP 已将 glibc 的 _incomplete_ 副本放入`~/lib` 目录。“glibc”源代码树提供的所有共享库都必须同步安装和升级。问题是,该列表包括动态链接器本身(通常但不总是`/lib/ld-linux.so.2`)并且 LD_LIBRARY_PATH 不能覆盖动态链接器的位置。因此,不可能安装 glibc 的较新(或较旧)副本并使用 LD_LIBRARY_PATH 选择它。您只能安装在备用位置(不要使用 /usr/local/lib!),然后针对它重新编译内容。 (5认同)