find | grep libc.so.6
Run Code Online (Sandbox Code Playgroud)
显示它在 中/lib/i386-linux-gnu/libc.so.6,但我运行的脚本预计它直接在 下/lib,那么为什么至少没有符号链接?
如果我在那里放置符号链接,我会冒险破坏任何东西吗?
Col*_*son 23
libc.so作为Ubuntu 11.04 中多架构工作的一部分被移动。不能有符号链接的原因是 multiarch 的目的是可以同时安装i386和amd64版本,libc以便您可以在 64 位系统上更轻松地运行 32 位二进制文件和反之亦然(以及其他类似情况)。如果该libc6包包含指向新位置的符号链接,则不同架构的该包的版本将无法同时安装(会dpkg选择哪个版本的符号链接?),从而破坏了练习的全部意义。
libc.so从 Ubuntu 11.04 开始,任何硬编码路径的东西都必须更新才能正常工作。如果您正在谈论的脚本是 Ubuntu 的一部分,请报告它的错误并添加multiarch标签。
Lek*_*eyn 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
Run Code Online (Sandbox Code Playgroud)
要找出程序加载了什么库,请使用lddas in ldd /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)
Run Code Online (Sandbox Code Playgroud)
放置符号链接不会破坏任何东西。
要获取搜索的目录列表,请运行:
ldconfig -v -N | grep '^/'
Run Code Online (Sandbox Code Playgroud)
-v导致显示文件 + 目录列表,-N防止/etc/ld.so.cache重新创建缓存 ( )。
小智 5
只需将符号链接添加到 libc.so.6 文件,如下所示:
sudo ln -s /lib/i386-linux-gnu/libc.so.6 /lib/libc.so.6
Run Code Online (Sandbox Code Playgroud)
对于仍在系统上的其他丢失文件也是如此,在我的情况下,Matlab 丢失了该文件,现在问题消失了。
| 归档时间: |
|
| 查看次数: |
205959 次 |
| 最近记录: |