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

yad*_*taf 11 debugging gdb libtool

我有一个涉及的项目

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

当我尝试继续运行gdbtest_mylib,它会打印:

"test_mylib": not in executable format: File format not recognized
Run Code Online (Sandbox Code Playgroud)

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

.libs/test_mylib: can't load library 'libhello.so.0'
Run Code Online (Sandbox Code Playgroud)

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

yad*_*taf 15

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

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

Libtool程序生成方便脚本允许调试实际安装完成之前(谁想要安装错误的软件之前,并调试?)

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

libtool --mode=execute gdb test_mylib
Run Code Online (Sandbox Code Playgroud)


nob*_*bar 5

libtool文档建议的解决方案是在开发过程中使用静态链接,正如我在以下文章中所描述的那样:使用静态链接到本地​​组件来构建libtool应用程序

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

例如:

./configure --enable-debug --disable-shared
Run Code Online (Sandbox Code Playgroud)

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

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