gpt4 book ai didi

c++ - 如何调试加载共享库

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:51:44 25 4
gpt4 key购买 nike

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

我还从 libtest.so 转储了 elf header ,它同时设置了 PIC 和 CPIcflags,所以我认为创建库是可以的。

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

我试过以下方法

  1. 如果我从链接进程中删除 libtest.so,并删除对 libtest.so 的所有引用,则“tv”进程可以毫无问题地运行。

  2. 如果我删除了对 libtest.so 的任何引用,但在链接过程中保留了 libtest.so,“tv”过程仍然不会运行。

  3. 我尝试使用 LD_DEBUG=all 进行调试,但它在我的板上不起作用,因为没有有效输出。

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

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

最佳答案

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

关于c++ - 如何调试加载共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13638728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com