10.4.2 Using Convenience Libraries

back: inter-library dependencies
forward: executing uninstalled binaries
 
fastback: executing uninstalled binaries
up: linking a library
fastforward: executing uninstalled binaries
top: autoconf, automake, and libtool
contents: table of contents
index: index
about: about this document

To rebuild `libtrim' as a convenience library (see section Creating Convenience Libraries), use the following commands:

 
 $ rm hello *.la $ ls hello.c   hello.lo   hello.o   main.c   trim.c   trim.lo   trim.o $ libtool gcc -o libtrim.la trim.lo rm -fr .libs/libtrim.la .libs/libtrim.* .libs/libtrim.* ar cru .libs/libtrim.al trim.lo ranlib .libs/libtrim.al creating libtrim.la (cd .libs && rm -f libtrim.la && ln -s ../libtrim.la libtrim.la) 

Then, rebuild `libhello' , with an inter-library dependency on `libtrim' (see section 10.4.1 Inter-library Dependencies), like this:

 
 $ libtool gcc -rpath `pwd`/_inst -o libhello.la hello.lo libtrim.la rm -fr .libs/libhello.la .libs/libhello.* .libs/libhello.* *** Warning: inter-library dependencies are not known to be supported. *** All declared inter-library dependencies are being dropped. *** The inter-library dependencies that have been dropped here will be *** automatically added whenever a program is linked with this library *** or is declared to -dlopen it. rm -fr .libs/libhello.lax mkdir .libs/libhello.lax rm -fr .libs/libhello.lax/libtrim.al mkdir .libs/libhello.lax/libtrim.al (cd .libs/libhello.lax/libtrim.al && ar x /tmp/./.libs/libtrim.al) /opt/gcc-lib/hp821/2.7.0/ld -b +h libhello.sl.0 +b /tmp/hello/_inst \ -o .libs/libhello.sl.0.0  hello.lo .libs/libhello.lax/libtrim.al/trim.lo (cd .libs && rm -f libhello.sl.0 && ln -s libhello.sl.0.0 libhello.sl.0) (cd .libs && rm -f libhello.sl && ln -s libhello.sl.0.0 libhello.sl) rm -fr .libs/libhello.lax mkdir .libs/libhello.lax rm -fr .libs/libhello.lax/libtrim.al mkdir .libs/libhello.lax/libtrim.al (cd .libs/libhello.lax/libtrim.al && ar x /tmp/hello/./.libs/libtrim.al) ar cru .libs/libhello.a  hello.o  .libs/libhello.lax/libtrim.al/trim.lo ranlib .libs/libhello.a rm -fr .libs/libhello.lax .libs/libhello.lax creating libhello.la (cd .libs && rm -f libhello.la && ln -s ../libhello.la libhello.la) $ ls hello.c    hello.o       libtrim.la   trim.c    trim.o hello.lo   libhello.la   main.c       trim.lo 

Compare this to the previous example of building `libhello' and you can see that things are rather different. On HP-UX, partial linking is not known to work, so libtool extracts the objects from the convenience library, and links them directly into `libhello' . That is, `libhello' is comprised of its own objects and the objects in `libtrim' . If `libtrim' had had any dependencies, `libhello' would have inherited them too. This technique is especially useful for grouping source files into subdirectories, even though all of the objects compiled in the subdirectories must eventually reside in a big library: compile the sources in each into a convenience library, and in turn link all of these into a single library which will then contain all of the constituent objects and dependencies of the various convenience libraries.

When you relink the hello executable, notice that `libtrim' is not linked, because the `libtrim' objects are already present in `libhello' :

 
 $ libtool gcc -o hello main.c libhello.la libtool: link: warning: this platform does not like uninstalled libtool: link: warning: shared libraries libtool: link: hello will be relinked during installation gcc -o .libs/hello main.c /tmp/intro-hello/.libs/libhello.sl \ -Wl,+b -Wl,/tmp/intro-hello/.libs:/usr/local/lib creating hello $ ./hello Hello, World! 

This document was generated by Gary V. Vaughan on May, 24 2001 using texi2html


GNU Autoconf, Automake and Libtool
GNU Autoconf, Automake, and Libtool
ISBN: 1578701902
EAN: 2147483647
Year: 2002
Pages: 290

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