Node:Which library,
Next:Libraries order,
Previous:Unresolved externals,
Up:Compiling
Q: I'm lost with all those different libraries. How in the world
can I find out which functions are included in which library?
A: You can use the nm program to check what functions are
included in a library. Run it with the -C option and with the library
as its argument and look in the output for the name of your function (the
-C, or --demangle option makes the function names look
closer to what they are called in the source file). Functions which have
their code included in the library have a capital T before their
name. For example, the following is a fragment from the listing produced by
nm:
c:\djgpp\lib> nm --demangle libc.a
.
.
.
stdio.o:
000000e4 b .bss
000000e4 d .data
00000000 t .text
00000098 t L12
0000001e t L3
00000042 t L6
0000004d t L7
0000006a t L9
00000000 t __gnu_compiled_c
U _filbuf
U _flsbuf
00000000 T clearerr
000000ac T feof
000000c2 T ferror
000000d8 T fileno
0000000c T getc
00000052 T getchar
0000002a T putc
0000007c T putchar
00000000 t gcc2_compiled.
.
.
.
Here we see that the module stdio.o defines the functions
clearerr, feof, ferror, fileno, getc,
getchar, putc and putchar, and calls functions
_filbuf and _flsbuf which aren't defined on this module.
Alternatively, you can call nm with the -s or
--print-armap, which will print an index of what symbols are
included in what modules. For instance, for libc.a, we will see:
c:\djgpp\lib> nm --print-armap libc.a
.
.
.
_feof in stdio.o
_ferror in stdio.o
_fileno in stdio.o
.
.
.
which tells us that the functions feof, ferror and
fileno are defined in the module stdio.o.
nm is fully described in the GNU docs. See GNU Binutils Manual.