Articles of ldd

检查非默认加载器的共享库

ldd是一个很好的简单的方法来检查一个给定的可执行文件是或将要使用的共享库。 然而,它并不总是按预期工作。 例如,请参阅下面的shell代码片段,演示如何将libreadline“dependency”创build为python二进制文件 我已经尝试了很多其他的发行版,但我从Tikanga复制 $ lsb_release -a LSB Version: :core-4.0-amd64:core-4.0-ia32:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-ia32:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-ia32:printing-4.0-noarch Distributor ID: RedHatEnterpriseServer Description: Red Hat Enterprise Linux Server release 5.6 (Tikanga) Release: 5.6 Codename: Tikanga 看看默认安装的python (从官方仓库) ldd做什么。 $ which python /usr/bin/python $ ldd `which python` libpython2.4.so.1.0 => /usr/lib64/libpython2.4.so.1.0 (0x00000030e6200000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00000030e0e00000) libdl.so.2 => /lib64/libdl.so.2 (0x00000030e0a00000) libutil.so.1 => /lib64/libutil.so.1 (0x00000030ee800000) libm.so.6 => […]

ldd是否也显示依赖项的依赖关系?

我有一个二进制为ldd显示意外的依赖和libicuuc(从“icu”)。 #ldd A […] libxml2.so.2 => /usr/lib64/libxml2.so.2 (0x00007faaf9722000) libicuuc.so.49 => /usr/lib64/libicuuc.so.49 (0x00007faaf5689000) 由于在这个系统上libxmldynamic地依赖libicuuc,所以ldd最终会发现它是有道理的,但是它预期libicuuc也会出现在ldd的A输出中? 是否有一些命令只检索链接的依赖关系的库?

什么是ld-linux.so.2和linux-gate.so.1?

当我运行ldd program我得到了表单的输出 linux-gate.so.1 => (0xb77ae000) libstdc++.so.6 => /lib/libstdc++.so.6 (0xb76bc000) libm.so.6 => /lib/libm.so.6 (0xb7691000) libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb7674000) libc.so.6 => /lib/libc.so.6 (0xb74c2000) /lib/ld-linux.so.2 (0xb77af000) 你能解释一下输出和linux-gate.so.1和ld-linux.so.2 linux-gate.so.1显示不同于其他input的原因吗? 他们的angular色是什么?

ldd和objdump有什么区别?

我正在运行这两个命令,我得到不同的输出: $ ldd `which ls` linux-gate.so.1 => (0x00db3000) libselinux.so.1 => /lib/i386-linux-gnu/libselinux.so.1 (0x00ba2000) librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0x007bf000) libacl.so.1 => /lib/i386-linux-gnu/libacl.so.1 (0x004ce000) libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x00110000) libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0x00398000) /lib/ld-linux.so.2 (0x00dea000) libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0x00a83000) libattr.so.1 => /lib/i386-linux-gnu/libattr.so.1 (0x00d3d000) 接着 objdump -x `which ls` | grep NEEDED NEEDED libselinux.so.1 NEEDED librt.so.1 NEEDED libacl.so.1 NEEDED libc.so.6 那是怎么回事? […]

linux / gcc:在C / C ++程序中的lddfunction

有没有一种简单而有效的方法来知道给定的dynamic链接的ELF是否缺less一个所需的.so文件来运行,所有这一切都来自C / C ++程序的内部? 我需要一个function与ldd相似的程序,而不需要执行ELF来查找系统中的(met / unmet)依赖关系。 也许通过一些库问ld-linux.so实用程序? (我是一个新手在这个部分的Linux =) 注意:读取ldd的源代码对我的意图不是很有帮助:看起来ldd实际上正在分叉另一个进程并执行程序。 如果不知道某个程序没有执行它的依赖性,那么有没有办法,至less可以在我的程序中快速列出这个ELF所需的.so文件? 在此先感谢=)

加载共享库时出错:libboost_system.so.1.45.0:无法打开共享对象文件:没有这样的文件或目录

我正在Linux上构build一个C ++可执行文件。 可执行文件链接到一些boost库。 这是我尝试运行二进制文件时的输出: root@yourbox:~/work/dev/c++/projects/testfgci/dist/Debug/GNU-Linux-x86$ ./testfgci ./testfgci: error while loading shared libraries: libboost_system.so.1.45.0: cannot open shared object file: No such file or directory 然后在二进制文件上运行ldd来检查依赖关系: root@yourbox:~/work/dev/c++/projects/testfgci/dist/Debug/GNU-Linux-x86$ ldd testfgci linux-gate.so.1 => (0x00380000) libboost_system.so.1.45.0 => not found libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00b50000) libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0x005f6000) libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x0099a000) libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x001b3000) libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0x00110000) /lib/ld-linux.so.2 […]

分层ldd(1)

由于使用Gentoo,经常发生在更新程序与旧版本的库链接之后。 通常情况下,revdep-rebuild有助于解决这个问题,但是这次它是一个python库的依赖, python-updater不会去捡起它。 是否有一个ldd的“等级”变体,告诉我共享库依赖于哪个共享库? 大多数情况下,库和可执行文件仅与less数其他共享库链接,而这些共享库又与less数几个库链接,从而将库依赖关系变为大列表。 我想知道哪些依赖关系,我已经与我升级的另一个库的新版本重build。

用RPATHbuild立OpenSSL?

我有Ubuntu 14.04。 它带有openssl 1.0.1f。 我想安装另一个openssl版本(1.0.2),我想自己编译它。 我configuration它如下: LDFLAGS='-Wl,–export-dynamic -L/home/myhome/programs/openssl/i/lib -L/home/myhome/programs/zlib/i/lib' CPPFLAGS='-I/home/myhome/programs/openssl/i/include -I/home/myhome/programs/zlib/i/include' ./config –prefix=/home/myhome/programs/openssl/i \ zlib-dynamic shared –with-zlib-lib=/home/myhome/programs/zlib/i/lib \ –with-zlib-include=/home/myhome/programs/zlib/i/include make make install 安装完成后,当我用ldd openssl检查二进制文件时,结果是: … libssl.so.1.0.0 => /home/myhome/programs/openssl/i/lib/libssl.so.1.0.0 (0x00007f91138c0000) libcrypto.so.1.0.0 => /home/myhome/programs/openssl/i/lib/libcrypto.so.1.0.0 (0x00007f9113479000) … 看起来不错 但是当我检查ldd libssl.so ,结果是: … libcrypto.so.1.0.0 => /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007fac70930000) … 它仍然使用libcrypto的系统版本。 我尝试了不同的方法来构build,但结果始终保持不变。 我的问题是如何configuration构build的方式,它可以硬编码共享库的所有二进制和库依赖关系,而不使用LD_LIBRARY_PATH ,或类似的东西。

Windows的ldd相当于什么?

Windows的ldd相当于什么?