【问题标题】:How to debug a program wrapped in a libtool script?如何调试包含在 libtool 脚本中的程序?
【发布时间】:2012-08-22 08:03:35
【问题描述】:

我有一个项目涉及

  • 共享库即:mylib.so
  • (测试)使用这些共享库的程序,即:test_mylib

当我尝试在 test_mylib 上运行 gdb 时,它会打印:

"test_mylib": not in executable format: File format not recognized

当我直接使用真实程序(.libs/test_mylib)时,它仍然抱怨:

.libs/test_mylib: can't load library 'libhello.so.0'

如何运行 gdb 来调试我的程序?

【问题讨论】:

    标签: debugging gdb libtool


    【解决方案1】:

    这是我几天前遇到的问题,目前还没有关于 SO 的通用答案。只有特殊情况。这是我在此页面上找到的答案:http://www.gnu.org/software/libtool/manual/html_node/Debugging-executables.html

    在安装程序之前,系统不知道到哪里寻找共享对象。它们通常位于源文件夹的.libs 子目录中。

    Libtool 会生成一个方便的脚本,以便在实际安装完成之前进行调试(谁想要安装有缺陷的软件之前,调试它之后?)

    幸运的是,生成的脚本为此提供了帮助:

    libtool --mode=execute gdb test_mylib
    

    【讨论】:

    • 在 OS X 机器上,我得到 error: libtool: unknown option character `-' in: --mode=execute(我的解决方法是安装到前缀,但从长远来看,下面提到的 --disable-shared 可能更简单)
    【解决方案2】:

    libtool 文档推荐的解决方案是在开发过程中使用静态链接,正如我所述:Build libtool application with static linking to local components

    为此,请在./configure 脚本中使用--disable-shared 选项。

    例如:

    ./configure --enable-debug --disable-shared
    

    现在生成的可执行文件是直接可执行的二进制文件,而不是 libtool 脚本。

    这具有将构建时间大致减半的额外好处。

    【讨论】:

    猜你喜欢
    • 2011-12-30
    • 2018-03-28
    • 2014-06-28
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    • 2011-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多