tags:

views:

70

answers:

3

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
Does that not find the function names given the library, rather than the library given the function name?
Pete Kirkham
@Pete: True, but since it exports the information, it can be used to grep over library files.
unwind
Thanks.. I got it..
Dinesh
+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
And if it's not, the library documentation presumably states how to link to it.
nos
+1  A: 
Pavel Shved