如何调试加载共享库

SSC*_*SSC 5 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进行调试,但由于没有有效的输出,它在我的主板上不起作用.

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

任何建议都是受欢迎的.提前致谢.

小智 0

确保这与缺少要作为 C 函数调用的 API 的 extern C 声明无关。