Linux的ldd命令

本文翻译自: Using the ldd command on Linux

ldd展示了特定的Linux命令需要运行的共享对象文件。

共享对象文件通过提供应用程序完成工作所需的信息来简化程序,但这些信息不必是应用程序本身的一部分。

要找出 Linux 命令调用了这些文件中的哪一个,请使用ldd命令。

1.什么是共享对象文件?

共享对象文件(指定为 .so)是程序启动时自动链接到程序中的库,但作为独立文件存在。它们包含可供一个或多个程序用来卸载资源的信息,这样调用 .so 文件的任何程序本身就不必实际提供所有需要的工具。这些文件可以链接到任何程序,并加载到内存中的任何位置。

单个 .so 文件可能包含有关如何快速搜索整个计算机或执行非常复杂的计算的信息和函数。然后多个程序可以调用该 .so 文件。事实上,.so 文件可以更新/替换,而这些程序无需对其自己的代码进行任何更改。

共享库可以在运行时链接到任何程序。可以将它们视为可供许多不同程序使用的代码块,从而使这些程序更小、更高效,而不是确保所有使用它们的程序都包含它们,并在代码更改时根据需要进行更新。

2.使用ldd

下面这个简单的例子使用ldd去寻找date命令使用的文件:
在这里插入图片描述
结果表明date命令使用了3个共享对象文件。

请注意,使用 ldd 时必须包含文件的完整路径名。否则,ldd 会在当前目录中查找程序名称,但很可能找不到它。

如果你无法确定一个程序的具体位置,你可以使用which指令:
在这里插入图片描述
或者:

$ ldd `which pwd`
        linux-vdso.so.1 (0x00007ffc3b9e4000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f2d491a9000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f2d49396000)

您可以使用 -v(或 –verbose)选项获取更多信息:

$ ldd -v `which pwd`
        linux-vdso.so.1 (0x00007ffeea1f6000)
        libc.so.6 => /lib64/libc.so.6 (0x00007ff3b0c64000)
        /lib64/ld-linux-x86-64.so.2 (0x00007ff3b0e51000)

        Version information:
        /usr/bin/pwd:
                libc.so.6 (GLIBC_2.3) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.14) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.3.4) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.33) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.4) => /lib64/libc.so.6
                libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6
        /lib64/libc.so.6:
                ld-linux-x86-64.so.2 (GLIBC_2.2.5) => /lib64/ld-linux-x86-64.so.2
                ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2
                ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib64/ld-linux-x86-64.so.2

当所需的共享库缺失时,有时会使用 ldd 命令,并生成“未找到”消息。例如:

libcsfml-graphics.so.2.2 => not found

如果缺少许多或所有所需的库,则实际上可能缺少用于建立连接的配置文件或符号链接。缺少共享对象文件的情况非常罕见,您不太可能遇到此问题。

当然,这个输出不会告诉你有多少程序使用这些共享库,以及如果其中一个比较重要的共享库从你的系统中删除,你会遇到多大的麻烦。即使是常用的命令也可能会停止工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值