精华内容
下载资源
问答
  • ldd

    2020-04-25 08:50:58
    Linux开发实用工具之ldd: 实际项目中程序因缺少某些库文件,而不能正常运行,如何解决这个月都会,ldd就是可以提供帮助

    Linux开发实用工具之ldd:
    实际项目中程序因缺少某些库文件,而不能正常运行,如何解决这个月都会,ldd就是可以提供帮助

    展开全文
  • LDD

    2017-11-12 03:10:00
    [root@m conf]# ldd `which cc` linux-vdso.so.1 => (0x00007fffd41d0000) libiconv.so.2 => /usr/local/lib/libiconv.so.2 (0x00007fbee351b000) libm.so.6 =&g...
    [root@m conf]# ldd `which cc`
            linux-vdso.so.1 =>  (0x00007fffd41d0000)
            libiconv.so.2 => /usr/local/lib/libiconv.so.2 (0x00007fbee351b000)
            libm.so.6 => /lib64/libm.so.6 (0x00007fbee3297000)
            libc.so.6 => /lib64/libc.so.6 (0x00007fbee2f02000)

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



     本文转自 ninnycalf 51CTO博客,原文链接:http://blog.51cto.com/314258/1792021

    展开全文
  • LDD-源码

    2021-02-15 10:27:06
    LDD
  • linux中的ldd命令简介

    万次阅读 多人点赞 2015-07-26 21:03:34
    在linux中, 有些命令是大家通用的, 比如ls, rm, mv, cp等等, 这些我觉得没有必要再细说了。 而有些命令, 只有开发人员才会用到的, 这类命令, 作为程序员的我们, 是有...连ldd都不知道, 怎么知道ldd是干啥的呢?

            在linux中, 有些命令是大家通用的, 比如ls, rm, mv, cp等等, 这些我觉得没有必要再细说了。 而有些命令, 只有开发人员才会用到的, 这类命令, 作为程序员的我们, 是有必要了解的, 有的甚至需要熟练使用。

     

            有的人总说, 这些命令不重要, 用的时候去查就行了, 这么多么扯淡的说法啊。 具体用法细节是可以可查, 但至少得知道有ldd这个东西吧。连ldd都不知道, 怎么知道ldd是干啥的呢?

     

           在本文中, 我们来介绍一下ldd命令, 尽管它非常简单。  哦, 我突然想起来, 我有个朋友, 她的名字的是三个字, 首写字母刚好是l, d, d, 有点意思。  在linux中, ldd是list, dynamic, dependencies的缩写, 意思是, 列出动态库依赖关系。  当然, 你也可以用ldd --help或者man ldd来看其用法。 下面, 我们也来看看:

     

           test.h的内容为:

     

    void print();

           test.c的内容为:

     

     

    #include <stdio.h>
    #include "test.h"
    
    void print()
    {
    printf("rainy days\n");
    }

           main.c的内容为:

     

     

    #include "test.h"
    
    int main()
    {
    	print();
    	return 0;
    }

     

          进行一系列的编译, 并用ldd命令, 得到:

     

    [taoge@localhost learn_ldd]$ ls
    main.c  test.c  test.h
    [taoge@localhost learn_ldd]$ gcc -c main.c test.c
    [taoge@localhost learn_ldd]$ gcc main.o test.o
    [taoge@localhost learn_ldd]$ ls
    a.out  main.c  main.o  test.c  test.h  test.o
    [taoge@localhost learn_ldd]$ ./a.out 
    rainy days
    [taoge@localhost learn_ldd]$ 
    [taoge@localhost learn_ldd]$ 
    [taoge@localhost learn_ldd]$ 
    [taoge@localhost learn_ldd]$ ldd *
    a.out:
    	linux-gate.so.1 =>  (0x00ba1000)
    	libc.so.6 => /lib/libc.so.6 (0x0087e000)
    	/lib/ld-linux.so.2 (0x00858000)
    main.c:
    ldd: warning: you do not have execution permission for `./main.c'
    	not a dynamic executable
    main.o:
    ldd: warning: you do not have execution permission for `./main.o'
    	not a dynamic executable
    test.c:
    ldd: warning: you do not have execution permission for `./test.c'
    	not a dynamic executable
    test.h:
    ldd: warning: you do not have execution permission for `./test.h'
    lddlibc4: cannot read header from `./test.h'
    test.o:
    ldd: warning: you do not have execution permission for `./test.o'
    	not a dynamic executable
    [taoge@localhost learn_ldd]$ 
    

          可以看到a.out依赖于libc.so.6这个库, 而这个库的路径为/lib/libc.so.6

     

     

          我们继续看使用静态链接库的情形:

     

    [taoge@localhost learn_ldd]$ ls
    main.c  test.c  test.h
    [taoge@localhost learn_ldd]$ gcc -c test.c
    [taoge@localhost learn_ldd]$ ar rcs libtest.a test.o
    [taoge@localhost learn_ldd]$ gcc main.c -L. -ltest
    [taoge@localhost learn_ldd]$ ls
    a.out  libtest.a  main.c  test.c  test.h  test.o
    [taoge@localhost learn_ldd]$ ./a.out
    rainy days
    [taoge@localhost learn_ldd]$ 
    [taoge@localhost learn_ldd]$ 
    [taoge@localhost learn_ldd]$ 
    [taoge@localhost learn_ldd]$ ldd *
    a.out:
    	linux-gate.so.1 =>  (0x00e7c000)
    	libc.so.6 => /lib/libc.so.6 (0x0087e000)
    	/lib/ld-linux.so.2 (0x00858000)
    libtest.a:
    ldd: warning: you do not have execution permission for `./libtest.a'
    	not a dynamic executable
    main.c:
    ldd: warning: you do not have execution permission for `./main.c'
    	not a dynamic executable
    test.c:
    ldd: warning: you do not have execution permission for `./test.c'
    	not a dynamic executable
    test.h:
    ldd: warning: you do not have execution permission for `./test.h'
    lddlibc4: cannot read header from `./test.h'
    test.o:
    ldd: warning: you do not have execution permission for `./test.o'
    	not a dynamic executable
    [taoge@localhost learn_ldd]$ 
    

           这次用静态库, 结果还是差不多, 就没什么好说的了。

     

     

           我们继续看使用动态链接库时的情形:

     

    [taoge@localhost learn_ldd]$ ls
    main.c  test.c  test.h
    [taoge@localhost learn_ldd]$ gcc -c test.c
    [taoge@localhost learn_ldd]$ gcc -shared -fPIC -o libtest.so test.o
    [taoge@localhost learn_ldd]$ gcc main.c -L. -ltest
    [taoge@localhost learn_ldd]$ ls
    a.out  libtest.so  main.c  test.c  test.h  test.o
    [taoge@localhost learn_ldd]$ ./a.out 
    ./a.out: error while loading shared libraries: libtest.so: cannot open shared object file: No such file or directory
    [taoge@localhost learn_ldd]$ 
    [taoge@localhost learn_ldd]$ 
    [taoge@localhost learn_ldd]$ 
    [taoge@localhost learn_ldd]$ ldd *
    a.out:
    	linux-gate.so.1 =>  (0x00f3d000)
    	libtest.so => not found
    	libc.so.6 => /lib/libc.so.6 (0x0087e000)
    	/lib/ld-linux.so.2 (0x00858000)
    libtest.so:
    	linux-gate.so.1 =>  (0x0031d000)
    	libc.so.6 => /lib/libc.so.6 (0x00110000)
    	/lib/ld-linux.so.2 (0x00858000)
    main.c:
    ldd: warning: you do not have execution permission for `./main.c'
    	not a dynamic executable
    test.c:
    ldd: warning: you do not have execution permission for `./test.c'
    	not a dynamic executable
    test.h:
    ldd: warning: you do not have execution permission for `./test.h'
    lddlibc4: cannot read header from `./test.h'
    test.o:
    ldd: warning: you do not have execution permission for `./test.o'
    	not a dynamic executable
    [taoge@localhost learn_ldd]$ 
    [taoge@localhost learn_ldd]$ su root
    Password: 
    [root@localhost learn_ldd]# cp libtest.so /usr/lib/
    [root@localhost learn_ldd]# ./a.out 
    rainy days
    [root@localhost learn_ldd]# exit
    exit
    [taoge@localhost learn_ldd]$ ./a.out 
    rainy days
    [taoge@localhost learn_ldd]$
    [taoge@localhost learn_ldd]$
    [taoge@localhost learn_ldd]$
    [taoge@localhost learn_ldd]$ ldd a.out 
    	linux-gate.so.1 =>  (0x00510000)
    	libtest.so => /usr/libtest.so (0x00fe3000)
    	libc.so.6 => /lib/libc.so.6 (0x0087e000)
    	/lib/ld-linux.so.2 (0x00858000)
    [taoge@localhost learn_ldd]$ 
    

            首先, 我们可以看到, a.out依赖于libtest.so这个库, 但是, 结果是not found, 找不到。 为什么呢? 因为在/usr/lib下面没有libtest.so, 后来, 我把libtest.so拷贝过去(需要root权限), 就OK了。 另外, 我们也应该看到, libtest.so的依赖库也是可以通过ldd命令找到的。

     

             当然, 如果不想自己写程序, 但想试一下ldd命令, 那也可以, 直接如下:

     

    [taoge@localhost learn_ldd]$ ldd /bin/ls
    	linux-gate.so.1 =>  (0x0052b000)
    	libselinux.so.1 => /lib/libselinux.so.1 (0x00b52000)
    	librt.so.1 => /lib/librt.so.1 (0x00a5c000)
    	libcap.so.2 => /lib/libcap.so.2 (0x0489c000)
    	libacl.so.1 => /lib/libacl.so.1 (0x048c9000)
    	libc.so.6 => /lib/libc.so.6 (0x0087e000)
    	libdl.so.2 => /lib/libdl.so.2 (0x00a0c000)
    	/lib/ld-linux.so.2 (0x00858000)
    	libpthread.so.0 => /lib/libpthread.so.0 (0x00a13000)
    	libattr.so.1 => /lib/libattr.so.1 (0x04d99000)
    [taoge@localhost learn_ldd]$ ldd /bin/mv
    	linux-gate.so.1 =>  (0x00944000)
    	libselinux.so.1 => /lib/libselinux.so.1 (0x00b52000)
    	librt.so.1 => /lib/librt.so.1 (0x00a5c000)
    	libacl.so.1 => /lib/libacl.so.1 (0x048c9000)
    	libattr.so.1 => /lib/libattr.so.1 (0x04d99000)
    	libc.so.6 => /lib/libc.so.6 (0x00110000)
    	libdl.so.2 => /lib/libdl.so.2 (0x00a0c000)
    	/lib/ld-linux.so.2 (0x00858000)
    	libpthread.so.0 => /lib/libpthread.so.0 (0x00a13000)
    [taoge@localhost learn_ldd]$ 
    

     

     

     

            在实际linux开发与调试中, 要经常查看动态库依赖关系, ldd用得还是比较多的, 特别是出现故障的时候。OK, ldd命令就简单介绍到这里了, 虽然简单, 但很实用, 故不可不知。

     

     

            好了, 今天也写了不少文章了, 就此搁笔。 收拾一下, 看看书, 早点休息, 迎接明天的周一。

     

     

     

     

     

     

     

     

    展开全文
  • ldd命令

    2019-07-23 19:21:00
    ldd命令用于打印程序或者库文件所依赖的共享库列表。 语法 ldd(选项)(参数) 选项 --version:打印指令版本号; -v:详细信息模式,打印所有相关信息; -u:打印未使用的直接依赖; -d:执行重定位和报告任何...

    ldd命令用于打印程序或者库文件所依赖的共享库列表。

    语法

    ldd(选项)(参数)

    选项

    --version:打印指令版本号;
    -v:详细信息模式,打印所有相关信息;
    -u:打印未使用的直接依赖;
    -d:执行重定位和报告任何丢失的对象;
    -r:执行数据对象和函数的重定位,并且报告任何丢失的对象和函数;
    --help:显示帮助信息。

    参数

    文件:指定可执行程序或者文库。

    其他介绍

    首先ldd不是一个可执行程序,而只是一个shell脚本

    ldd能够显示可执行模块的dependency,其原理是通过设置一系列的环境变量,如下:LD_TRACE_LOADED_OBJECTS、LD_WARN、LD_BIND_NOW、LD_LIBRARY_VERSION、LD_VERBOSE等。当LD_TRACE_LOADED_OBJECTS环境变量不为空时,任何可执行程序在运行时,它都会只显示模块的dependency,而程序并不真正执行。要不你可以在shell终端测试一下,如下:

    export LD_TRACE_LOADED_OBJECTS=1

    再执行任何的程序,如ls等,看看程序的运行结果。

    ldd显示可执行模块的dependency的工作原理,其实质是通过ld-linux.so(elf动态库的装载器)来实现的。我们知道,ld-linux.so模块会先于executable模块程序工作,并获得控制权,因此当上述的那些环境变量被设置时,ld-linux.so选择了显示可执行模块的dependency。

    实际上可以直接执行ld-linux.so模块,如:/lib/ld-linux.so.2 --list program(这相当于ldd program)

    展开全文
  • ldd 命令

    2020-06-18 20:47:24
    ldd是 list, dynamic, dependencies 的缩写。 列出动态库依赖关系,下图为 ldd *,列出当前目录下所有的动态库的依赖情况。
  • 显示行号|选择喜欢的代码风格默认GitHubDuneLakeSidePlateauVibrantBlueEightiesTranquilldd 命令打印程序和库的共享库...ldd 命令安装:-bash: ldd: command not found#Debianapt-get install libc-bin#Ubuntuapt-...
  • zlf@ubuntu:~/$ whichldd/usr/bin/lddzlf@ubuntu:~/$ file /usr/bin/ldd/usr/bin/ldd: Bourne-Again shell script, ASCII text executable2、ldd能够显示可执行模块的dependency,其原理是通过设置一系列的环境变量...
  • ldd usr bin mysql_ldd命令

    2021-02-06 23:39:00
    ldd命令用于判断某个可执行的 binary 档案含有什么动态函式库。参数说明:--version 打印ldd的版本号-v --verbose 打印所有信息,例如包括符号的版本信息-d --data-relocs 执行符号重部署,并报告缺少的目标对象(只...
  • LDD电子图纸.rar

    2020-04-10 19:38:15
    LDD电子图纸
  • lddldd命令用于打印程序或者库文件所依赖的共享库列表ldd不是一个可执行程序,而只是一个shell脚本golanggo install -buildmode=shared stdgo build -linkshared hi.goLinuxldd /usr/local/bin/openssllinux-vdso.so...
  • LDD2+LDD3 linux设备驱动

    2011-12-05 22:17:11
    LDD2+LDD3 linux设备驱动
  • ldd command

    2019-04-28 17:49:31
    ldd命令用于打印程序或者库文件所依赖的共享库列表。 语法 ldd(选项)(参数) 选项 –version:打印指令版本号; -v:详细信息模式,打印所有相关信息; -u:打印未使用的直接依赖; -d:执行重定位和报告任何丢失的...
  • ldd3 Linux内核5.8中的完整示例
  • linux ldd 移植

    2020-12-23 11:03:24
    1.什么是ldd 在本文中, 我们来介绍一下ldd命令, 尽管它非常简单。 在linux中, ldd是list, dynamic, dependencies的缩写, 意思是, 列出动态库依赖关系。 当然, 你也可以用ldd --help或者man ldd来看其用法。 ...
  • Linux ldd

    2019-12-01 13:27:51
    在linux中, ldd是list, dynamic, dependencies的缩写, 意思是, 列出动态库依赖关系。 hello.h中的内容 #ifndef HELLO_H #define HELLO_H #include <stdio.h> void HelloFunc(); #endif hello.c中的内容...
  • Add ldd.py, a clone of ldd

    2020-11-26 05:47:50
    <div><p>This is useful on systems built with musl (see http://www.musl-libc.org/) which lack an ldd. I am currently working on tests.</p><p>该提问来源于开源项目:eliben/pyelftools</p></div>
  • windows使用ldd命令

    2020-04-08 13:47:28
    cmd运行,然后输入ldd.exe 程序.exe 即可查看程序.exe 所依赖的dll文件。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,823
精华内容 2,329
关键字:

ldd