• 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 刷新该缓存。

  • 相关阅读:
    spring framework体系结构及模块jar依赖关系
    Spring的核心jar包
    Spring AOP的理解和使用
    Spring特点与工作原理
    接口和抽象类的区别
    Java重载和重写的区别
    Jdk1.8中的HashMap实现原理
    Java集合中List,Set以及Map等集合体系详解
    Spring面试题整理
    ActiveMQ入门操作示例
  • 原文地址:https://www.cnblogs.com/tongyishu/p/12588724.html
Copyright © 2020-2023  润新知