我有一个使用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进行调试,但由于没有有效的输出,因此无法在我的主板上使用。
所以我猜想当“tv”进程启动时ld尝试加载libtest.so时会出现问题。但我不知道如何调试?我该如何判断libtest.so的哪一部分是否导致问题?
欢迎任何建议。提前谢谢。
答案 0 :(得分:0)
确保这与错过您的API的extern C声明无关,这些声明将作为C函数调用。
答案 1 :(得分:0)
加载过程中出错。因此,编写最简单的应用程序,加载您的库并立即卸载它并进行调试。