delorie.com is funded by banner ads.
  www.delorie.com/djgpp/v2faq/faq058.html   search  

| Previous | Next | Up | Top |

8.8 How not to lose your head with all these libraries

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 the "nm" section of the "GNU Binutils Manual".


  webmaster   donations   bookstore     delorie software   privacy  
  Copyright ⌐ 1998   by Eli Zaretskii     Updated Sep 1998  

Powered by Apache!

You can help support this site by visiting the advertisers that sponsor it! (only once each, though)