5

我有一个使用 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 进行调试,但它在我的板上不起作用,因为没有有效的输出。

所以我猜当 ld 在“tv”进程启动时尝试加载 libtest.so 时出现了问题。但是不知道怎么调试?我应该如何确定 libtest.so 的哪一部分导致了问题?

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

4

2 回答 2

0

You have error in load process. So write simplest application which loads your library and unloads it immediatelly and debug it.

于 2013-01-08T15:16:58.530 回答
0

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

于 2012-12-10T12:30:37.300 回答