14

我有一个项目涉及

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

当我尝试运行gdbtest_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 来调试我的程序?

4

2 回答 2

16

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

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

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

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

libtool --mode=execute gdb test_mylib
于 2012-08-27T19:52:54.870 回答
6

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

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

例如:

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

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

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

于 2016-05-18T14:44:16.377 回答