如何查找谁在调用共享库函数?

时间:2015-05-27 14:04:23

标签: c++ linker shared-libraries

我有一些C ++代码,内部使用多个第三方库。代码编译良好但在执行期间无法加载某些共享库(libintbasic.so)。鉴于条件,我无法在系统中安装任何库,唯一的出路是找到调用该库的函数。我怎么能找到谁在调用该库(我的代码不直接调用它)。

3 个答案:

答案 0 :(得分:1)

  

我无法在系统中安装任何库,

这似乎是一个虚假声明:显然,您可以将二进制文件复制到系统中。将附加库安装到同一目录中并不困难。

  

我怎么能找到那个叫那个图书馆的人

有两种情况需要考虑:

  1. 您的二进制文件或其中一个与libintbasic.so链接直接链接的库。您的二进制文件不会运行
  2. 您的二进制文件,或与调用dlopen("libintbasic.so",...)直接关联的其中一个库,并在dlopen失败时失败。
  3. 通过设置LD_DEBUG=files,libs,调试第一个案例通常最简单。然后,动态加载器将告诉您正在加载哪些库,以及为什么需要它们。

    使用gdb调试第二种情况很简单:在dlopen上设置断点,并在每次遇到断点时执行whereinfo shared命令。

答案 1 :(得分:0)

删除链接选项-lintbasic,您将在错误消息中看到需要此库的所有函数。这不干净,但应该可以正常工作。

答案 2 :(得分:0)

您可以递归使用ldd实用程序来查找共享库之间的所有依赖项。

以下链接也可能有用:Does ldd also show dependencies of dependencies?