Linux 跟踪链接库

Linux 跟踪链接库,linux,debugging,shared-libraries,ldd,Linux,Debugging,Shared Libraries,Ldd,我得到了一些错误,这让我觉得我的Linux程序没有链接到它应该链接的库。如何获取所有链接库的完整路径?我知道ldd会告诉我名称,但我如何使用它来获取完整路径 谢谢。实际上ldd提供了应用程序共享库依赖项中任何文件名的绝对路径 $ ldd v8test linux-gate.so.1 => (0xb78b2000) libz.so.1 => /usr/lib/libz.so.1 (0xb787e000) librt.so.1 => /lib/i

我得到了一些错误,这让我觉得我的Linux程序没有链接到它应该链接的库。如何获取所有链接库的完整路径?我知道
ldd
会告诉我名称,但我如何使用它来获取完整路径


谢谢。

实际上
ldd
提供了应用程序共享库依赖项中任何文件名的绝对路径

    $ ldd v8test 
    linux-gate.so.1 =>  (0xb78b2000)
    libz.so.1 => /usr/lib/libz.so.1 (0xb787e000)
    librt.so.1 => /lib/i686/cmov/librt.so.1 (0xb7875000)
    libcppunit-1.12.so.1 => /usr/lib/libcppunit-1.12.so.1 (0xb782c000)
    libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb7604000)
    libm.so.6 => /lib/i686/cmov/libm.so.6 (0xb75dd000)
    libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb75bf000)
    libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7478000)
    libpthread.so.0 => /lib/i686/cmov/libpthread.so.0 (0xb745f000)
    libboost_system-mt.so.1.38.0 => /usr/lib/libboost_system-mt.so.1.38.0 (0xb745b000)
    /lib/ld-linux.so.2 (0xb78b3000)
    libdl.so.2 => /lib/i686/cmov/libdl.so.2 (0xb7456000)
    libboost_thread-mt.so.1.38.0 => /usr/lib/libboost_thread-mt.so.1.38.0 (0xb7383000)
    libboost_filesystem-mt.so.1.38.0 => /usr/lib/libboost_filesystem-mt.so.1.38.0 (0xb7370000)
    libtinyxml.so.1 => /home/dmitry/tinyxml/libtinyxml.so.1 (0xb7359000)
    libboost_regex-mt.so.1.38.0 => /usr/lib/libboost_regex-mt.so.1.38.0 (0xb728c000)
    libmysqlclient_r.so.15 => /usr/lib/libmysqlclient_r.so.15 (0xb70a1000)
    libicuuc.so.42 => /usr/lib/libicuuc.so.42 (0xb6f61000)
    libicudata.so.42 => /usr/lib/libicudata.so.42 (0xb601a000)
    libicui18n.so.42 => /usr/lib/libicui18n.so.42 (0xb5e6b000)
    libcrypt.so.1 => /lib/i686/cmov/libcrypt.so.1 (0xb5e39000)
    libnsl.so.1 => /lib/i686/cmov/libnsl.so.1 (0xb5e22000)
这些库通过其soname(例如libboost_filesystem-mt.so.1.38.0)在
/etc/ld.so.conf
ld_LIBRARY_PATH
中提到的路径中进行搜索,或者在二进制文件本身中设置
rpath

如果
ldd
无法找到它的外观

    libicuuc.so.42 => not found

在这种情况下,考虑使用上述方法之一给出正确的搜索路径。< /P>

ldd
将在由于某种原因无法加载库时发出警告

$ ldd v8test 
./v8test: error while loading shared libraries: /home/dmitry/a/liba.so.2: invalid ELF header
当然,它不能保护您免受库本身错误的影响。事实上,您的应用程序可能依赖于库A和库B,两者都依赖于某些库C上不兼容的版本。在这种情况下,您的程序很有可能崩溃(除非库C没有),ldd不会警告您,但您应该能够在输出中看到它

会对你有用的


还请检查
ldd
或的一些选项。

实际上
ldd
提供了应用程序共享库依赖项中任何文件名的绝对路径

    $ ldd v8test 
    linux-gate.so.1 =>  (0xb78b2000)
    libz.so.1 => /usr/lib/libz.so.1 (0xb787e000)
    librt.so.1 => /lib/i686/cmov/librt.so.1 (0xb7875000)
    libcppunit-1.12.so.1 => /usr/lib/libcppunit-1.12.so.1 (0xb782c000)
    libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb7604000)
    libm.so.6 => /lib/i686/cmov/libm.so.6 (0xb75dd000)
    libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb75bf000)
    libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7478000)
    libpthread.so.0 => /lib/i686/cmov/libpthread.so.0 (0xb745f000)
    libboost_system-mt.so.1.38.0 => /usr/lib/libboost_system-mt.so.1.38.0 (0xb745b000)
    /lib/ld-linux.so.2 (0xb78b3000)
    libdl.so.2 => /lib/i686/cmov/libdl.so.2 (0xb7456000)
    libboost_thread-mt.so.1.38.0 => /usr/lib/libboost_thread-mt.so.1.38.0 (0xb7383000)
    libboost_filesystem-mt.so.1.38.0 => /usr/lib/libboost_filesystem-mt.so.1.38.0 (0xb7370000)
    libtinyxml.so.1 => /home/dmitry/tinyxml/libtinyxml.so.1 (0xb7359000)
    libboost_regex-mt.so.1.38.0 => /usr/lib/libboost_regex-mt.so.1.38.0 (0xb728c000)
    libmysqlclient_r.so.15 => /usr/lib/libmysqlclient_r.so.15 (0xb70a1000)
    libicuuc.so.42 => /usr/lib/libicuuc.so.42 (0xb6f61000)
    libicudata.so.42 => /usr/lib/libicudata.so.42 (0xb601a000)
    libicui18n.so.42 => /usr/lib/libicui18n.so.42 (0xb5e6b000)
    libcrypt.so.1 => /lib/i686/cmov/libcrypt.so.1 (0xb5e39000)
    libnsl.so.1 => /lib/i686/cmov/libnsl.so.1 (0xb5e22000)
这些库通过其soname(例如libboost_filesystem-mt.so.1.38.0)在
/etc/ld.so.conf
ld_LIBRARY_PATH
中提到的路径中进行搜索,或者在二进制文件本身中设置
rpath

如果
ldd
无法找到它的外观

    libicuuc.so.42 => not found

在这种情况下,考虑使用上述方法之一给出正确的搜索路径。< /P>

ldd
将在由于某种原因无法加载库时发出警告

$ ldd v8test 
./v8test: error while loading shared libraries: /home/dmitry/a/liba.so.2: invalid ELF header
当然,它不能保护您免受库本身错误的影响。事实上,您的应用程序可能依赖于库A和库B,两者都依赖于某些库C上不兼容的版本。在这种情况下,您的程序很有可能崩溃(除非库C没有),ldd不会警告您,但您应该能够在输出中看到它

会对你有用的


还请检查
ldd
或。

如果我知道0x2F48D76B附近的某些代码已损坏,ldd输出是否排除其为损坏库的可能性?如果我知道0x2F48D76B附近的某些代码已损坏,ldd输出是否排除其为损坏库的可能性?