我有一些C ++代码,内部使用多个第三方库。代码编译良好但在执行期间无法加载某些共享库(libintbasic.so)。鉴于条件,我无法在系统中安装任何库,唯一的出路是找到调用该库的函数。我怎么能找到谁在调用该库(我的代码不直接调用它)。
答案 0 :(得分:1)
我无法在系统中安装任何库,
这似乎是一个虚假声明:显然,您可以将二进制文件复制到系统中。将附加库安装到同一目录中并不困难。
我怎么能找到那个叫那个图书馆的人
有两种情况需要考虑:
libintbasic.so
链接直接链接的库。您的二进制文件不会运行 或dlopen("libintbasic.so",...)
直接关联的其中一个库,并在dlopen
失败时失败。通过设置LD_DEBUG=files,libs
,调试第一个案例通常最简单。然后,动态加载器将告诉您正在加载哪些库,以及为什么需要它们。
使用gdb
调试第二种情况很简单:在dlopen
上设置断点,并在每次遇到断点时执行where
和info shared
命令。
答案 1 :(得分:0)
删除链接选项-lintbasic,您将在错误消息中看到需要此库的所有函数。这不干净,但应该可以正常工作。
答案 2 :(得分:0)
您可以递归使用ldd实用程序来查找共享库之间的所有依赖项。