9.5 Creating and Linking Static Libraries

The creation of static libraries in Mac OS X is the same as in many Unix variants: after installation in the destination directory, ranlib must be used to recatalog the newly installed archive libraries (i.e., the lib*.a files).

Another issue involving static libraries is the order in which things are listed when libraries are linked. The Darwin link editor loads object files and libraries in the exact order given in the cc command. For example, suppose we've created a static archive library named libmtr.a . Consider the following attempt to link to this library:

 $ cc -L. -lmtr -o testlibmtr testlibmtr.o   /usr/bin/ld: Undefined symbols:   _cot   _csc   _sec 

The rewrite of the command works as follows :

 $ cc -o testlibmtr testlibmtr.o -L. -lmtr 

In the first case, the library is placed first and no undefined symbols are encountered , so the library is ignored (there's nothing to be done with it). However, the second attempt is successful, because the object files are placed before the library. For the link editor to realize that it needs to look for undefined symbols (which are defined in the library), it must encounter the object files before the static library.

Mac OS X Panther for Unix Geeks
Mac OS X Panther for Unix Geeks
ISBN: 0596006071
EAN: 2147483647
Year: 2003
Pages: 212

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net