Linux 跟踪哪个函数需要给定的链接库

Linux 跟踪哪个函数需要给定的链接库,linux,shared-libraries,dynamic-linking,Linux,Shared Libraries,Dynamic Linking,我在运行时的路径中需要一些链接库,我不确定为什么需要它们。我希望能够找到他们被呼叫的来源的某种追溯 假设我在myprogram.c(语言不重要)中有一个main,它调用函数func1()和func2(),这两个函数分别来自共享库libshared1.So和libshared2.So。有没有办法从可执行文件中找到从libshared2.so加载的func2() 理想情况下,我正在寻找一个linux命令,输入command./myprogram,并输出以下内容: myprogram.c:1 func

我在运行时的路径中需要一些链接库,我不确定为什么需要它们。我希望能够找到他们被呼叫的来源的某种追溯

假设我在myprogram.c(语言不重要)中有一个main,它调用函数
func1()
func2()
,这两个函数分别来自共享库libshared1.So和libshared2.So。有没有办法从可执行文件中找到从libshared2.so加载的
func2()

理想情况下,我正在寻找一个linux命令,输入
command./myprogram
,并输出以下内容:

myprogram.c:1 func1() loaded from libshared1.so at ~/libshared1.so
myprogram.c:2 func2() from libshared2.so at ~/libraries/libshared2.so
myprogram.c:3 func1() loaded from libshared1.so at ~/libshared1.so
或者
命令。/myprogram libshared1.so
给出:

libshared1.so used in myprogram in:
func1() (myprogram.c:1)
func1() (myprogram.c:3)
据我所知,ltrace、strace和ldd没有提供此信息


即使我忘了在路径中包含一个共享库,它也能工作,这是一个额外的好处。

您可以使用
objdump
反汇编文件,并在输出中查找
call
语句。对于一个小程序,是的,但没有明确的方法来区分调用是否来自共享库,这不是很有用。