vides a weak library interface to the common symbols in the library it shares with the modules. That way, when 'libtool' links the *Module Loader* library with some *Dlpreopened Modules* that were in turn linked against the *Module Interface Library*, it knows that the *Module Loader* provides an already loaded *Module Interface Library* to resolve symbols for the *Dlpreopened Modules*, and doesn't ask the compiler driver to link an identical *Module Interface Library* dependency library too. In conjunction with Automake, the 'Makefile.am' for the *Module Loader* might look like this: lib_LTLIBRARIES = libinterface.la libloader.la libinterface_la_SOURCES = interface.c interface.h libinterface_la_LDFLAGS = -version-info 3:2:1 libloader_la_SOURCES = loader.c libloader_la_LDFLAGS = -weak libinterface.la \ -version-info 3:2:1 \ -dlpreopen ../modules/intrinsics.la libloader_la_LIBADD = $(libinterface_la_OBJECTS) And the 'Makefile.am' for the 'intrinsics.la' module in a sibling 'modules' directory might look like this: AM_CPPFLAGS = -I$(srcdir)/../libloader AM_LDFLAGS = -no-undefined -module -avoid-version \ -export-dynamic noinst_LTLIBRARIES = intrinsics.la intrinsics_la_LIBADD = ../libloader/libinterface.la ../libloader/libinterface.la: cd ../libloader && $(MAKE) $(AM_MAKEFLAGS) libinterface.la For a more complex example, see the sources of 'libltdl' in the Libtool distribution, which is built with the help of the '-weak' option.