Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 图书馆包含哪些功能?_C_Linux_Linker_Makefile - Fatal编程技术网

C 图书馆包含哪些功能?

C 图书馆包含哪些功能?,c,linux,linker,makefile,C,Linux,Linker,Makefile,是否有手册或方法可用于找出哪个文件libXX.so包含标题YYY.h中的函数等 例如: 我包括一个标题foo.h,其中包含函数foofunk()。 但是链接器说未定义对foofunk()的引用 注: 我想在构建和链接过程中使用Makefile。(GCC) 我的源代码是C语言的,但这并不重要。使用 现在,在您怀疑定义给定函数的共享库上循环,并使用objdump检查每个库 for f in /usr/lib/lib*.so; do \ objdump -T $f | grep ' Base '

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

例如:

我包括一个标题foo.h,其中包含函数foofunk()。 但是链接器说未定义对foofunk()的引用

注:

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

使用

现在,在您怀疑定义给定函数的共享库上循环,并使用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
,并去掉其中一个
grep
s

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

如果库的创建者关心命名约定和良好实践,则
声明
libfoo.so
中定义的函数。如果他没有,你无论如何也不应该使用那个库。@H2CO3 sry我不明白你是什么meaning@Manfred再读一遍,我错误地点击了enter以获得性能良好的库,您可能对/usr/lib/lib*中的f的
:/usr/lib$感兴趣;doobjdump-T$f | grep-qprintf和echo$f和break;done/usr/lib/libasprintf.so
这个示例输出的意思是,printf在libasprintf.so中吗?如果我假设函数在libXX
中呢?我再次修改了答案。它现在解决问题了吗?
objdump -t library.a | grep ' function_name$'