2010-06-30 96 views

回答

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" 

该命令行是未经测试的草图,但它应该显示该概念。

+0

这是否没有找到给定的函数名称的函数名称,而不是给出函数名称的函数库? – 2010-06-30 07:54:07

+0

@Pete:是的,但是由于它导出信息,它可以用于grep库文件。 – unwind 2010-06-30 08:06:44

+0

谢谢..我知道了.. – Dinesh 2010-06-30 08:44:26

1

如果它是C标准API的一部分,那么只需运行man,它应该清楚地说明函数的定义位置。

+0

如果不是这样,图书馆的文档大概说明了如何链接到它。 – nos 2010-06-30 08:10:37

1

如果您想以非程序化的方式找出图书馆,您可能会发现LSB Navigator有用。在搜索框中输入该函数,然后用绿色“状态”检查该行中的库。

http://coldattic.info/pic/165509391387.png

这将是“传统的”库包含函数(在上面描述的例子,librtmq_unlink正确的库,让你-lrt链接)。只需与该库链接,它几乎可以在所有Linux系统上运行。

注:我是我推荐的工具的开发人员之一。