Libtool abstracts shared and static libraries into a unified
concept henceforth called libtool libraries. Libtool libraries
are files using the .la
suffix, and can designate a static
library, a shared library, or maybe both. Their exact nature cannot
be determined until ./configure
is run: not all platforms
support all kinds of libraries, and users can explicitly select which
libraries should be built. (However the package's maintainers can
tune the default, See The AC_PROG_LIBTOOL
macro.)
Because object files for shared and static libraries must be compiled
differently, libtool is also used during compilation. Object files
built by libtool are called libtool objects: these are files
using the .lo
suffix. Libtool libraries are built from these
libtool objects.
You should not assume anything about the structure of .la
or
.lo
files and how libtool constructs them: this is libtool's
concern, and the last thing one wants is to learn about libtool's
guts. However the existence of these files matters, because they are
used as targets and dependencies in Makefile
s when building
libtool libraries. There are situations where you may have to refer
to these, for instance when expressing dependencies for building
source files conditionally (see Conditional Libtool Sources).
People considering writing a plug-in system, with dynamically loaded
modules, should look into libltdl
: libtool's dlopening library
(see Using libltdl).
This offers a portable dlopening facility to load libtool libraries
dynamically, and can also achieve static linking where unavoidable.
Before we discuss how to use libtool with Automake in details, it should be noted that the libtool manual also has a section about how to use Automake with libtool (see Using Automake with Libtool).