我知道这些命令:
readelf -sW alloc.o | awk '$4 == "FUNC"'
nm alloc.o | awk '$2=="T" || $2=="t"'
我可以获得库中使用的函数名称。
但是,如何区分库中 USED 的功能,以及库中 DEFINED 的功能?
是否有另一种方法来获取库定义的函数?
非常感谢!
答案 0 :(得分:0)
我知道这些命令:...我可以获得库中使用的函数的名称。
不,你不能。命令提供的是目标文件(或库)中定义的函数列表。
是否有其他方法可以通过库
获取函数DEFINED
为什么你需要另一种方式?
如何区分库使用的函数以及库定义的函数
这取决于你的意思"由图书馆使用"。典型的库将使用它自己的一些功能,而一些功能则来自外部。例如,包含foo.o
和bar.o
的{{1}}调用foo()
以及bar()
以外的bar()
调用的库将如下所示:
baz()
您可以在此处看到 readelf -Ws libfoobar.a | egrep 'foo|bar|baz' | grep -v ' ABS'
File: libfoobar.a(foo.o)
8: 0000000000000000 16 FUNC GLOBAL DEFAULT 1 foo
9: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND bar
File: libfoobar.a(bar.o)
8: 0000000000000000 16 FUNC GLOBAL DEFAULT 1 bar
9: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND baz
定义foo.o
,并使用foo
; bar
定义bar.o
并使用bar
(此库中未定义)。
您可以看到的是,库是否使用了baz
(例如foo
是否递归)。