如何调试包含在libtool脚本中的程序?

时间:2012-08-27 19:52:55

标签: debugging gdb libtool

我有一个涉及

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:11)

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

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

Libtool生成一个便利脚本,允许在实际安装完成之前进行调试(谁想在之前安装错误的软件,在之后调试?)

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

libtool --mode=execute gdb test_mylib

答案 1 :(得分:4)

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

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

例如:

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

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

这样可以大大减少构建时间。