How to find the library, which contains the definition of particular function? I am getting linker error.
+4
A:
You can use the nm
command-line tool to list exported symbols in binaries:
~/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
According to the manual, 't' means that the symbol is in the code (text) segment, and uppercase means it's public.
If you have a symbol that you're looking for, you can use nm
to make the symbols exported by a library accessible to e.g. grep:
$ find -name lib*.a /example/library/path | xargs nm | grep -E "T $SYMBOL_TO_FIND"
This command-line is an untested sketch, but it should show the concept.
unwind
2010-06-30 07:15:38
Does that not find the function names given the library, rather than the library given the function name?
Pete Kirkham
2010-06-30 07:54:07
@Pete: True, but since it exports the information, it can be used to grep over library files.
unwind
2010-06-30 08:06:44
Thanks.. I got it..
Dinesh
2010-06-30 08:44:26
+1
A:
If it's part of the C standard API then just run man
, it should clearly state where the function is defined.
Yuval A
2010-06-30 07:18:45
And if it's not, the library documentation presumably states how to link to it.
nos
2010-06-30 08:10:37