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. |