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

Debugging 如何调试包装在libtool脚本中的程序?,debugging,gdb,libtool,Debugging,Gdb,Libtool,我有一个项目涉及 共享库ie:mylib.so (测试)使用这些共享库的程序,即:test\u mylib 当我尝试在test\u 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' 如何运行

我有一个项目涉及

  • 共享库ie:
    mylib.so
  • (测试)使用这些共享库的程序,即:
    test\u mylib
当我尝试在
test\u 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来调试我的程序?

这是我几天前遇到的问题,目前还没有通用的答案。只有特殊情况。以下是我在本页上找到的答案:

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

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

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

libtool --mode=execute gdb test_mylib

libtool文档推荐的解决方案是在开发过程中使用静态链接,如我在以下站点所述:

为此,请使用
/configure
脚本的选项

例如:

./configure --enable-debug --disable-shared
现在生成的可执行文件是直接可执行的二进制文件,而不是libtool脚本


这还有一个额外的好处,就是大约将构建时间减少了一半。

没有禁用共享解决方案的其他后台信息:在OS X机器上,我在--mode=execute中得到了
错误:libtool:未知选项字符“--”(我的解决方法是安装到前缀,但从长远来看,禁用下面提到的共享可能更简单)