我有一个使用 uclibc 在 MIPS CPU 上运行的多进程程序,它是用 gcc 4.5.3 编译的。其中一个进程(名称为“tv”)需要与一个共享库(libtest.so)链接,该库也是由我编写的。“tv”进程是用 C++ 编写的,而 libtest.so 是用 C 编写的。
我还从 libtest.so 中转储了 elf 头文件,它同时设置了 PIC 和 CPIC 标志,所以我认为库的创建是可以的。
当我尝试运行该程序时,除了“tv”进程之外,所有进程都可以正常启动。没有错误信息。当我使用 ps 检查它的状态时,它已经变成了一个僵尸进程。
我试过以下
如果我从链接过程中删除 libtest.so,并删除对 libtest.so 的任何引用,则“tv”进程可以毫无问题地运行。
如果我删除了对 libtest.so 的任何引用,但将 libtest.so 保留在链接过程中,“tv”进程仍然不会运行。
我尝试使用 LD_DEBUG=all 进行调试,但它在我的板上不起作用,因为没有有效的输出。
所以我猜当 ld 在“tv”进程启动时尝试加载 libtest.so 时出现了问题。但是不知道怎么调试?我应该如何确定 libtest.so 的哪一部分导致了问题?
欢迎任何建议。提前致谢。