如何找到包含特定功能定义的库?我收到链接器错误。
答案 0 :(得分:4)
您可以使用nm
命令行工具列出二进制文件中的导出符号:
~/src> cat nm-test.c
static int plus_four(int x)
{
return x + 4;
}
int sum_plus_four(int a, int b)
{
return plus_four(a + b);
}
int product_plus_four(int a, int b)
{
return plus_four(a * b);
}
~/src> gcc -c nm-test.c
~/src> nm ./nm-test.o
00000000 t plus_four
00000023 T product_plus_four
0000000b T sum_plus_four
根据the manual,'t'表示符号位于代码(文本)段中,大写表示它是公共的。
如果您有要查找的符号,则可以使用nm
使图书馆导出的符号可以访问,例如grep的:
$ find -name lib*.a /example/library/path | xargs nm | grep -E "T $SYMBOL_TO_FIND"
此命令行是未经测试的草图,但它应显示概念。
答案 1 :(得分:1)
如果它是C标准API的一部分,那么只需运行man
,它应该清楚地说明函数的定义位置。
答案 2 :(得分:1)
如果您想以非程序化方式查找库,您可能会发现LSB Navigator很有用。在搜索框中输入该功能,然后检查绿色“状态”行中的库。
http://coldattic.info/pic/165509391387.png
这将是包含该功能的“常规”库(在上面的示例中,librt
是mq_unlink
的正确库,因此您链接到-lrt
)。只需链接到该库,它几乎可以在所有Linux系统上运行。
注意:我是我推荐的工具的开发人员之一。