ldd

ldd

ldd(/usr/bin/ldd)本质是一个shell脚本,并不是一个二进制的可执行程序。

ldd可以列出一个程序运行所依赖的动态链接库(so文件)。

由于制作二进制程序的过程中经常需要判断需要哪些共享库的支持,所以要使用ldd找出所需的依赖并添加至目标系统中,以确保程序可以在独立的目标系统内可靠的运行。

eg.

# ldd /usr/bin/ls

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

        libachk.so => /lib64/libachk.so (0x00007f1159b5f000)

        libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f1159938000)

        libcap.so.2 => /lib64/libcap.so.2 (0x00007f1159733000)

        libacl.so.1 => /lib64/libacl.so.1 (0x00007f115952a000)

        libc.so.6 => /lib64/libc.so.6 (0x00007f1159159000)

        libdl.so.2 => /lib64/libdl.so.2 (0x00007f1158f55000)

        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f1158d39000)

        librt.so.1 => /lib64/librt.so.1 (0x00007f1158b31000)

        libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f11588cf000)

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

        libattr.so.1 => /lib64/libattr.so.1 (0x00007f11586ca000)

"=>"左边的表示该程序需要连接的so 名称,右边表示由 Linux 的共享库系统找到的对应的共享库在文件系统中的具体位置。

默认情况下,/etc/ld.so.conf 文件中包含有默认的共享库搜索路径。

通常情况下,许多开放源代码的程序或函数库都会默认将自己安装到 /usr/local 目录下的相应位置(如:/usr/local/bin 或 /usr/local/lib),以便与系统自身的程序或函数库相区别。

许多 Linux 系统的 /etc/ld.so.conf 文件中默认不包含 /usr/local/lib。因此往往会出现已经安装了共享库,但是却无法找到共享库的情况。

具体解决办法如下:

检查 /etc/ld.so.conf 文件,如果其中缺少 /usr/local/lib 目录,就添加进去;

注意:在修改了 /etc/ld.so.conf文件或者在系统中安装了新的函数库之后,需要运行一个命令:ldconfig,该命令用来刷新系统的共享库缓存,即 /etc/ld.so.cache 文件;

为了减少共享库系统的库搜索时间,共享库系统维护了一个共享库 so 名称的缓存文件/etc/ld.so.cache。因此在安装新的共享库之后,一定要运行 ldconfig 刷新该缓存。

上一篇:Anconda安装教程


下一篇:win10 anconda安装 failed to create menu