Autoconf, Automake, and Libtool: Inter-library Dependencies

| ### 10.4.1 Inter-library Dependencies `libtool`'s inter-library dependency support will use the native implementation if there is one available. If there is no native implementation, or if the native implementation is broken or incomplete, `libtool` will use an implementation of its own. To build ``libtrim'` as a standard Libtool library (see section 10.2 The Libtool Library), as follows:
    $ rm hello *.a *.o
    $ ls
    hello.c   main.c   trim.c
    $ libtool gcc -c trim.c
    rm -f .libs/trim.lo
    gcc -c  -fPIC -DPIC trim.c -o .libs/trim.lo
    gcc -c trim.c -o trim.o >/dev/null 2>&1
    mv -f .libs/trim.lo trim.lo
    $ libtool gcc -rpath /usr/local/lib -o libtrim.la trim.lo
    rm -fr .libs/libtrim.la .libs/libtrim.* .libs/libtrim.*
    /opt/gcc-lib/hp821/2.7.0/ld -b +h libtrim.sl.0 +b /usr/local/lib \
    -o .libs/libtrim.sl.0.0  trim.lo
    (cd .libs && rm -f libtrim.sl.0 && ln -s libtrim.sl.0.0 libtrim.sl.0)
    (cd .libs && rm -f libtrim.sl && ln -s libtrim.sl.0.0 libtrim.sl)
    ar cru .libs/libtrim.a  trim.o
    ranlib .libs/libtrim.a
    creating libtrim.la
    (cd .libs && rm -f libtrim.la && ln -s ../libtrim.la libtrim.la)
When you build ``libhello'`, you can specify the libraries it depends on at the command line, like so:
    $ libtool gcc -c hello.c
    rm -f .libs/hello.lo
    gcc -c  -fPIC -DPIC hello.c -o .libs/hello.lo
    gcc -c hello.c -o hello.o >/dev/null 2>&1
    mv -f .libs/hello.lo hello.lo
    $ libtool gcc -rpath /usr/local/lib -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.
    /opt/gcc-lib/hp821/2.7.0/ld -b +h libhello.sl.0 +b /usr/local/lib \
    -o .libs/libhello.sl.0.0  hello.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)
    ar cru .libs/libhello.a  hello.o
    ranlib .libs/libhello.a
    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
Although, on HP-UX, `libtool` warns that it doesn't know how to use the native inter-library dependency implementation, it will track the dependencies and make sure they are added to the final link line, so that you only need to specify the libraries that you use directly. Now, you can rebuild ``hello'` exactly as in the earlier example (see section 10.3 Linking an Executable), as in:
    $ 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 \
    /tmp/intro-hello/.libs/libtrim.sl \
    -Wl,+b -Wl,/tmp/intro-hello/.libs:/usr/local/lib
    creating hello
    $ ./hello
    Hello, World!
Notice that even though you only specified the ``libhello.la'` library at the command line, `libtool` remembers that ``libhello.sl'` depends on ``libtrim.sl'` and links that library too. You can also link a static executable, and the dependencies are handled similarly:
    $ libtool gcc -o hello-again -static main.c libhello.la
    gcc -o hello main.c ./.libs/libhello.a /tmp/intro-hello/.libs/libtrim.a
    $ ./hello-again
    Hello, World!
For your own projects, provided that you use `libtool`, and that you specify the libraries you wish to link using the ``.la'` pseudo-libraries, these dependencies can be nested as deeply as you like. You can also register dependencies on native libraries, though you will of course need to specify any dependencies that the native library itself has at the same time.

This document was generated by Gary V. Vaughan on February, 8 2006 using texi2html