【问题标题】:How to use debug version of a shared object如何使用共享对象的调试版本
【发布时间】:2012-11-16 15:48:23
【问题描述】:

我必须使用共享库的调试版本(特别是通过apt-get install libpcap0.8-dbg 安装在 Ubuntu 中的 libpcap)...我构建了我的可执行文件并链接到它并且所有工作(通过ldd 验证)...但是当我运行可执行文件时,我得到一个段错误......动态链接器无法加载库。使用objdump 我看到Dynamic section 是空的:

$objdump -p libpcap.so.1.1.1
...
Dynamic section:

$

我认为在 ELF 共享对象中,Dynamic section 的某些字段是强制性的……那么,为什么这部分是空的?也许有不同的方法可以正确加载它?

【问题讨论】:

    标签: linux shared-libraries dynamic-linking


    【解决方案1】:

    说实话,我不使用 Ubuntu,但 AFAIK 调试包不包含完整版本的库或二进制文件,只是从中剥离了调试信息。这些只是由 eu-strip 或类似工具切出的部分。你不应该链接他们。事实上,根本不需要重新链接您的应用程序。如果工具本身无法做到这一点,您应该只指示 gdb、valgrind 或其他调试信息使用者在实际调试之前阅读它们,仅此而已。

    【讨论】:

    • 库的调试版本也有完整的.text、.data等......部分,不仅是调试部分,所以我认为它与非调试版本相同,但使用调试编译符号。
    • 你可能想看看这个错误:bugs.debian.org/cgi-bin/bugreport.cgi?bug=462456
    • 谢谢...这很有用。
    【解决方案2】:

    你可以试试LD_LIBRARY_PATH=/usr/lib/debug/

    【讨论】:

    • 问题不在于找不到库的动态链接器...加载它时会出现段错误(我使用 LD_DEBUG=all env 变量进行了验证)。我也试过 LD_PRELOAD 但结果是一样的。
    • 然后卸载并重新安装libpcap0.8-dbg 或者使用CFLAGS=-g 编译上游libpcap
    猜你喜欢
    • 2020-04-28
    • 2014-02-22
    • 1970-01-01
    • 2013-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    相关资源
    最近更新 更多