为什么缺少/lib/libc.so.6?


20
find | grep libc.so.6

揭示它在中/lib/i386-linux-gnu/libc.so.6,但是我正在运行的脚本期望它直接在之下/lib,那么为什么至少没有符号链接?

如果在其中放置符号链接,是否有可能破坏任何内容?

Answers:


22

libc.so在Ubuntu 11.04中作为多体系结构工作的一部分被移动了。之所以没有符号链接的原因是,multiarch的目的是使得可以同时安装i386amd64版本,libc以便可以在64位系统和32位系统上更轻松地运行32位二进制文​​件。反之亦然(以及其他类似情况)。如果libc6软件包中包含指向新位置的符号链接,则针对不同体系结构的该软件包的版本将无法同时安装(选择哪个版本的符号链接dpkg?),从而使整个练习失去了意义。

libc.so从Ubuntu 11.04开始,必须对路径进行硬编码的所有内容都必须进行更新才能正常工作。如果您要讨论的脚本是Ubuntu的一部分,请报告有关该脚本的错误并添加multiarch标签。


1
好答案,今天又重新学到了新知识:)
Lekensteyn 2011年

1
我使用的处理器甚至不支持64位指令。您是否会说手动添加符号链接会带来任何风险?不确定是否需要这样做,但是如果需要。无论如何,这似乎是正确的答案。谢谢。
Erik B

@Erik B:什么?您是在告诉我您要在32位处理器上使用64位应用程序吗?这绝对不是去上班。32位应用程序可以在64位处理器上正常运行,反之则不行。
Lekensteyn

@Lekensteyn绝对不是我要说的。我的意思是说我没有使用64位库。因此,在我的特定系统上,/lib/libc.so.6对于32位还是64位库,不会有任何混淆。
Erik B

3
如果您永远都不会使用64位软件包,那么我怀疑添加符号链接是否存在重大风险,不会。
科林·沃森

10

动态库由内核加载,路径未在程序中进行硬编码。一个程序只说“我需要libc.so.6”。如在定义中库路径然后,该系统搜索/etc/ld.so.conf,包括/usr/lib/lib默认情况下。该文件在中包含其他配置文件/etc/ld.so.conf.d

在我的64位系统上,由于中定义的路径,libc.so.6可以找到:/lib/x86_64-linux-gnu/libc.so.6/etc/ld.so.conf.d/x86_64-linux-gnu.conf

# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu

要找出程序加载了什么库,请使用,lddldd /bin/bash

    linux-vdso.so.1 =>  (0x00007ffff1dff000)
    libncurses.so.5 => /lib/libncurses.so.5 (0x00007f9d8b3b8000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f9d8b1b4000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9d8ae1f000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f9d8b61c000)

放置符号链接不会破坏任何内容。

要获取搜索到的目录列表,请运行:

ldconfig -v -N | grep '^/'

-v导致显示文件+目录列表,-N防止/etc/ld.so.cache重新创建缓存()。


放置符号链接不会破坏任何东西,但实际上也不会做任何事情,对不对?
Erik B

@Erik B:您指的是什么程序/脚本?我可以理解,由于路径是硬编码的,因此脚本会感到困惑。但是程序不必知道路径。
Lekensteyn

那是怎么回事?有时/usr/local/lib我会遇到一些程序无法在其中找到安装库的问题,但是如果我从其中建立符号链接,它们也可以正常工作/usr/lib。是什么原因导致这种现象?
crazy2be 2011年

@ crazy2be:可以发布输出ldconfig -v -N | grep '^/'吗?
Lekensteyn

@Lekensteyn:当然可以:pastebin.com/dtfnw2Tv。但是,几乎在我使用过的任何系统上,某些程序都发生了这种情况,因此,我认为它与系统配置无关。
crazy2be 2011年

5

只需将符号链接添加到libc.so.6文件,如下所示:

sudo ln -s /lib/i386-linux-gnu/libc.so.6 /lib/libc.so.6

对于仍然在系统上的其他丢失文件也是如此,以我为例,Matlab丢失了文件,问题现在就消失了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.