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. As an 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
make: *** [testlibmtr] Error 1
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.
 |  |  |
5.4. Library Versions |  | 5.6. Prebinding |