2015-05-27 28 views
1

我有一些C++代码,内部使用多个第三方库。代码编译良好,但在执行过程中无法加载某些共享库(libintbasic.so)。考虑到这种情况,我无法在系统中安装任何库,唯一的出路是找到哪个函数调用该库。我怎么能找到谁叫这个库(我的代码不直接调用这个库)。如何查找谁在调用共享库函数?

+1

使用调试器查找导致调用的行。 – user2079303

+1

你可能想要添加“linux”标签 –

回答

0

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

+0

嗯,那不是我想要做的事情。我想摆脱那些正在调用它的函数。我想找出这些功能。 – ari

+0

我刚刚编辑了我的答案。 – Brahim

1

我不能任何库安装到系统中,

这似乎是一个虚假的要求:明确您可以将二进制文件复制到系统中。将其他库安装到同一个目录并不困难。

我怎么能发现谁在呼叫该库

有两种情况考虑:

  1. 二进制文件或库之一,它直接链接到链接libintbasic.so。您的二进制文件不会运行
  2. 您的二进制文件或与其直接链接的库之一调用dlopen("libintbasic.so",...),并且在dlopen失败时失败。

通过设置LD_DEBUG=files,libs来调试第一个案例通常是最容易的。动态加载器会告诉你哪些库正在被加载,以及为什么需要它们。

调试第二种情况是容易gdb:设置dlopen断点,并执行每次命中断点时whereinfo shared命令。