【问题标题】:What functions includes a Library?什么功能包括图书馆?
【发布时间】:2012-10-12 10:27:29
【问题描述】:

是否有手册或方法可以从标题 YYY.h 中找出哪个文件 libXX.so 包含函数等?

例如:

我在头文件 foo.h 中包含函数 foofunk() 。 但是链接器说未定义对 foofunk() 的引用。

注意:

我想在构建和链接过程中使用 Makefile。 (海合会) 我的源代码是 C 语言的,但这应该不重要。

【问题讨论】:

  • 如果库的创建者关心命名约定和良好实践,那么<foo.h> 声明在libfoo.so 中定义的函数。如果他不这样做,那么您无论如何都不应该使用该库。
  • @H2CO3 对不起,我不明白你的意思
  • @Manfred 再读一遍,我误按回车了
  • 对于表现良好的库,您可能对freedesktop.org/wiki/Software/pkg-config感兴趣

标签: c linux linker makefile


【解决方案1】:

使用objdump

objdump -T library.so | grep ' Base ' | grep ' function_name$'

现在遍历您怀疑定义给定函数的共享库,并使用 objdump 检查每个共享库。

for f in /usr/lib/lib*.so; do \
  objdump -T $f | grep ' Base ' | grep -q ' function_name$' && echo $f && break
done

如果您在找到您要查找的库后仍想继续搜索,请删除 break

在静态库的情况下,将 -T 替换为 -t 并删除 greps 之一。

objdump -t library.a | grep ' function_name$'

【讨论】:

  • :/usr/lib$ for f in /usr/lib/lib*.so; do objdump -T $f | grep -q printf && echo $f && break; done /usr/lib/libasprintf.so 是那个例子输出的意思,那个 printf 在 libasprintf.so 中?
  • 如果我认为函数在 libXX.a 中怎么办?
  • 我再次修改了答案。现在问题解决了吗?
猜你喜欢
  • 2016-07-11
  • 2021-10-04
  • 2018-06-18
  • 2014-06-07
  • 2018-10-25
  • 2012-05-04
  • 2013-07-04
  • 2022-08-19
  • 1970-01-01
相关资源
最近更新 更多