如何调试加载共享库

时间:2012-11-30 03:47:53

标签: c++ c debugging gdb remote-debugging

我有一个使用uclibc在MIPS CPU上运行的多进程程序,它是用gcc 4.5.3编译的。 其中一个进程(名称为“tv”)需要链接一个共享库(libtest.so),这也是我编写的。 “tv”过程用C ++编写,libtest.so用C语言编写。

我还从libtest.so转储了elf头,它同时设置了PIC和CPIC标志,所以我认为库的创建没问题。

当我尝试运行程序时,除“tv”进程外,所有进程都启动正常。没有错误消息。当我使用ps检查它的状态时,它已成为一个僵尸进程。

我试过以下

  1. 如果我从链接过程中删除了libtest.so,并删除了对libtest.so的任何引用,那么“tv”进程可以毫无问题地运行。

  2. 如果删除对libtest.so的任何引用但是在链接过程中保留libtest.so,则“tv”进程仍然无法运行。

  3. 我曾尝试使用LD_DEBUG = all进行调试,但由于没有有效的输出,因此无法在我的主板上使用。

  4. 所以我猜想当“tv”进程启动时ld尝试加载libtest.so时会出现问题。但我不知道如何调试?我该如何判断libtest.so的哪一部分是否导致问题?

    欢迎任何建议。提前谢谢。

2 个答案:

答案 0 :(得分:0)

确保这与错过您的API的extern C声明无关,这些声明将作为C函数调用。

答案 1 :(得分:0)

加载过程中出错。因此,编写最简单的应用程序,加载您的库并立即卸载它并进行调试。