分享

ldd(ldd命令)

 jacklopy 2023-07-25 发布于河北

LDD是一个使用非常广泛的命令,可以查看一个 Linux 程序所需要的共享库,它在我们日常系统的维护,以及程序开发调试等方面都有非常重要的作用。本篇文章将从以下几个要素介绍 LDD 命令的使用技巧,方便大家在实际应用中更加得心应手。

一、LDD 命令的基本用法

LDD 命令的基本语法如下:

```sh

ldd [options] filename

```

其中 filename 为要查看的二进制文件的路径,options 可以设置一些选项,常用的选项有 -v、-u 等。

我们可以使用 LDD 命令来查看一个二进制文件所需要的共享库,例如查看 ls 命令所需要的共享库:

```sh

ldd /bin/ls

```

输出结果如下:

```sh

linux-vdso.so.1 => (0x00007ffc22176000)

libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f4c4bd7e000)

libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f4c4b9af000)

libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f4c4b76f000)

libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f4c4b56b000)

/lib64/ld-linux-x86-64.so.2 (0x000055fbb5266000)

libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f4c4b34e000)

```

从输出结果可以看出,ls 命令需要依赖的共享库有:linux-vdso.so.1、libselinux.so.1、libc.so.6、libpcre.so.3、libdl.so.2、libpthread.so.0 等。

二、LDD 命令的常用选项

1. -v 选项

-v 选项可以显示共享库的版本信息,例如:

```sh

ldd -v /bin/ls

```

输出结果中会显示每个共享库的版本信息:

```sh

linux-vdso.so.1 => (0x00007ffd0d7f0000)

libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f7faa962000)

libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7faa583000)

libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f7faa34d000)

libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f7faa249000)

/lib64/ld-linux-x86-64.so.2 (0x0000563f50896000)

libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f7faa02c000)

Version information:

/bin/ls:

libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6

libc.so.6 (GLIBC_2.4) => /lib/x86_64-linux-gnu/libc.so.6

libc.so.6 (GLIBC_2.17) => /lib/x86_64-linux-gnu/libc.so.6

libselinux.so.1 (LIBSELINUX_1.0) => /lib/x86_64-linux-gnu/libselinux.so.1

libpthread.so.0 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libpthread.so.0

```

2. -u 选项

-u 选项可以显示未解析的符号,例如:

```sh

ldd -u /bin/ls

```

输出结果中会显示未解析的符号信息:

```sh

linux-vdso.so.1 => (0x00007ffd1f5b7000)

libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007ffbbae84000)

libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ffbbaa97000)

libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007ffbba847000)

libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007ffbba643000)

/lib64/ld-linux-x86-64.so.2 (0x00005605829b9000)

libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007ffbba424000)

```

3. -rpath 选项

-rpath 选项可以设置加载共享库的路径,例如:

```sh

ldd -rpath /path/to/libs /path/to/bin

```

这个命令会将 /path/to/libs 目录中的共享库加到 /path/to/bin 的依赖库中。

三、LDD 命令在 Linux 系统维护中的应用

LDD 命令在 Linux 系统维护中有很多应用,例如:

1. 检查共享库的版本

由于不同版本的共享库可能存在差异,所以在系统维护过程中需要检查存在的共享库版本,以避免出现系统不兼容或错误的情况。

2. 检查共享库的依赖关系

在系统维护或升级过程中,有时需要检查一个程序的依赖关系是否正确,以确定其是否可以正常运行。

3. 卸载一个共享库

有时候需要卸载一个共享库,但在卸载前需要检查这个共享库是否被其他程序所依赖,以避免卸载后其他程序无法运行。

四、总结

LDD 命令是一个非常实用的命令,它可以查看一个 Linux 程序所需要的共享库,检查共享库版本,检查依赖关系等等,对于 Linux 系统的维护以及程序开发调试都有非常重要的作用。在实际应用中,请根据需求选择合适的选项来使用 LDD 命令,例如 -v、-u 等,以便更加得心应手。

ldd命令

ldd是一个linux命令,用于列出一个程序或动态链接库所依赖的共享库。本文将介绍ldd命令的使用方法、原理,以及如何通过ldd命令来解决常见问题。

一、ldd命令的使用方法

在Linux中,可以使用ldd命令来查看一个可执行程序或者共享库所需要的共享库。使用ldd命令非常简单,只需输入ldd加上目标文件的路径即可。例如:

ldd /usr/bin/vim

这将会显示出vim可执行程序所需要的所有共享库,如下所示:

libacl.so.1 => /lib/x86_64-linux-gnu/libacl.so.1 (0x00007f4be4d1b000)

libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f4be4969000)

libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f4be4765000)

/lib64/ld-linux-x86-64.so.2 (0x00007f4be4f49000)

libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f4be4546000)

此外,ldd命令还支持以下常用的选项:

- -v:打印出详细的依赖关系信息。

- -u:打印出未定义的符号。

- -r:将依赖库路径改为绝对路径。

二、ldd命令的使用原理

在Linux中,所有的可执行程序或共享库都是由一系列的目标文件链接形成。在链接过程中,会将目标文件所需的共享库的路径写入程序中。当程序启动运行时,系统就会自动寻找这些共享库并加载它们。

通过使用ldd命令,我们可以查看程序所需要的共享库路径,也可以检查程序是否缺少某些共享库。

三、如何通过ldd命令来解决常见问题

1. 找出导致程序崩溃的共享库

当程序崩溃或者无法正常运行时,常常是因为程序依赖的某个共享库缺失。使用ldd命令可以查看程序依赖的共享库是否存在。如果缺失了某个共享库,可以通过安装该共享库来解决。

2. 解决共享库版本冲突

当系统中存在多个版本的同一个共享库时,程序运行时可能会使用错误的库版本。此时,使用ldd命令可以查看程序所使用的共享库版本,以便找到并解决版本冲突问题。

3. 找出程序的运行环境

程序有时需要在特定的环境中运行,例如需要某个特定版本的Python库。使用ldd命令可以检查程序所依赖的库是否存在,并查看库的版本信息。

四、结论

总结一下,ldd命令是非常有用的Linux命令,可以帮助我们找出程序所需要的共享库,并解决常见的库版本冲突和缺失问题。通过学习和使用ldd命令,可以提高我们的Linux调试和开发能力。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约