DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH
 

(libtool14.info.gz) Inter-library dependencies

Info Catalog (libtool14.info.gz) Library tips (libtool14.info.gz) Top (libtool14.info.gz) Dlopened modules
 
 8 Inter-library dependencies
 ****************************
 
 By definition, every shared library system provides a way for
 executables to depend on libraries, so that symbol resolution is
 deferred until runtime.
 
    An "inter-library dependency" is one in which a library depends on
 other libraries.  For example, if the libtool library `libhello' uses
 the `cos' function, then it has an inter-library dependency on `libm',
 the math library that implements `cos'.
 
    Some shared library systems provide this feature in an
 internally-consistent way: these systems allow chains of dependencies of
 potentially infinite length.
 
    However, most shared library systems are restricted in that they only
 allow a single level of dependencies.  In these systems, programs may
 depend on shared libraries, but shared libraries may not depend on other
 shared libraries.
 
    In any event, libtool provides a simple mechanism for you to declare
 inter-library dependencies: for every library `libNAME' that your own
 library depends on, simply add a corresponding `-lNAME' option to the
 link line when you create your library.  To make an example of our
 `libhello' that depends on `libm':
 
      burger$ libtool gcc -g -O -o libhello.la foo.lo hello.lo \
                      -rpath /usr/local/lib -lm
      burger$
 
    When you link a program against `libhello', you don't need to
 specify the same `-l' options again: libtool will do that for you, in
 order to guarantee that all the required libraries are found.  This
 restriction is only necessary to preserve compatibility with static
 library systems and simple dynamic library systems.
 
    Some platforms, such as AIX, do not even allow you this flexibility.
 In order to build a shared library, it must be entirely self-contained
 (that is, have references only to symbols that are found in the `.lo'
 files or the specified `-l' libraries), and you need to specify the
 -NO-UNDEFINED flag.  By default, libtool builds only static libraries
 on these kinds of platforms.
 
    The simple-minded inter-library dependency tracking code of libtool
 releases prior to 1.2 was disabled because it was not clear when it was
 possible to link one library with another, and complex failures would
 occur.  A more complex implementation of this concept was re-introduced
 before release 1.3, but it has not been ported to all platforms that
 libtool supports.  The default, conservative behavior is to avoid
 linking one library with another, introducing their inter-dependencies
 only when a program is linked with them.
 
Info Catalog (libtool14.info.gz) Library tips (libtool14.info.gz) Top (libtool14.info.gz) Dlopened modules
automatically generated byinfo2html