4.2 Link mode
Link mode links together object files (including library
objects) to form another library or to create an executable program.
mode-args consist of a command using the C compiler to create an
output file (with the -o flag) from several object files.
The following components of mode-args are treated specially:
- -all-static
- If output-file is a program, then do not link it against any
shared libraries at all. If output-file is a library, then only
create a static library. In general, this flag cannot be used together
with ‘disable-static’ (see LT_INIT).
- -avoid-version
- Tries to avoid versioning (see Versioning) for libraries and modules,
i.e. no version information is stored and no symbolic links are created.
If the platform requires versioning, this option has no effect.
- -bindir
- Pass the absolute name of the directory for installing executable
programs (see Directory Variables). libtool may use this value to
install shared libraries there on systems that do not provide for any
library hardcoding and use the directory of a program and the PATH
variable as library search path. This is typically used for DLLs on
Windows or other systems using the PE (Portable Executable) format.
On other systems, -bindir is ignored. The default value used
is libdir/../bin for libraries installed to
libdir. You should not use -bindir for modules.
- -dlopen file
- Same as -dlpreopen file, if native dlopening is not
supported on the host platform (see Dlopened modules) or if
the program is linked with -static,
-static-libtool-libs, or -all-static. Otherwise, no
effect. If file is
self Libtool will make sure that the
program can dlopen itself, either by enabling
-export-dynamic or by falling back to -dlpreopen self.
- -dlpreopen file
- Link file into the output program, and add its symbols to the
list of preloaded symbols (see Dlpreopening). If file is
self, the symbols of the program itself will be added to
preloaded symbol lists. If file is force Libtool will
make sure that a preloaded symbol list is always defined,
regardless of whether it's empty or not.
- -export-dynamic
- Allow symbols from output-file to be resolved with
dlsym
(see Dlopened modules).
- -export-symbols symfile
- Tells the linker to export only the symbols listed in symfile.
The symbol file should end in .sym and must contain the name of one
symbol per line. This option has no effect on some platforms.
By default all symbols are exported.
- -export-symbols-regex regex
- Same as -export-symbols, except that only symbols matching
the regular expression regex are exported.
By default all symbols are exported.
- -Llibdir
- Search libdir for required libraries that have already been
installed.
- -lname
- output-file requires the installed library libname.
This option is required even when output-file is not an
executable.
- -module
- Creates a library that can be dlopened (see Dlopened modules).
This option doesn't work for programs.
Module names don't need to be prefixed with ‘lib’.
In order to prevent name clashes, however, libname and name
must not be used at the same time in your package.
- -no-fast-install
- Disable fast-install mode for the executable output-file. Useful
if the program won't be necessarily installed.
- -no-install
- Link an executable output-file that can't be installed and
therefore doesn't need a wrapper script on systems that allow hardcoding
of library paths. Useful if the program is only used in the build tree,
e.g., for testing or generating other files.
- -no-undefined
- Declare that output-file does not depend on any libraries other
than the ones listed on the command line, i.e., after linking, it will
not have unresolved symbols. Some platforms require all symbols in
shared libraries to be resolved at library creation (see Inter-library dependencies), and using this parameter allows libtool to
assume that this will not happen.
- -o output-file
- Create output-file from the specified objects and libraries.
- -objectlist file
- Use a list of object files found in file to specify objects.
- -precious-files-regex regex
- Prevents removal of files from the temporary output directory whose
names match this regular expression. You might specify ‘\.bbg?$’
to keep those files created with
gcc -ftest-coverage for example.
- -release release
- Specify that the library was generated by release release of your
package, so that users can easily tell which versions are newer than
others. Be warned that no two releases of your package will be binary
compatible if you use this flag. If you want binary compatibility, use
the -version-info flag instead (see Versioning).
- -rpath libdir
- If output-file is a library, it will eventually be installed in
libdir. If output-file is a program, add libdir to
the run-time path of the program. On platforms that don't support
hardcoding library paths into executables and only search PATH for
shared libraries, such as when output-file is a Windows (or
other PE platform) DLL, the .la control file will be installed in
libdir, but see -bindir above for the eventual destination
of the .dll or other library file itself.
- -R libdir
- If output-file is a program, add libdir to its run-time
path. If output-file is a library, add -Rlibdir to its
dependency_libs, so that, whenever the library is linked into a
program, libdir will be added to its run-time path.
- -shared
- If output-file is a program, then link it against any
uninstalled shared libtool libraries (this is the default behavior).
If output-file is a library, then only create a shared library.
In the later case, libtool will signal an error if it was configured
with --disable-shared, or if the host does not support shared
libraries.
- -shrext suffix
- If output-file is a libtool library, replace the system's standard
file name extension for shared libraries with suffix (most systems
use .so here). This option is helpful in certain cases where an
application requires that shared libraries (typically modules) have an
extension other than the default one. Please note you must supply the
full file name extension including any leading dot.
- -static
- If output-file is a program, then do not link it against any
uninstalled shared libtool libraries. If output-file is a
library, then only create a static library.
- -static-libtool-libs
- If output-file is a program, then do not link it against any
shared libtool libraries. If output-file is a library, then only
create a static library.
- -version-info current[:revision[:age]]
- If output-file is a libtool library, use interface version
information current, revision, and age to build it
(see Versioning). Do not use this flag to specify package
release information, rather see the -release flag.
- -version-number major[:minor[:revision]]
- If output-file is a libtool library, compute interface version
information so that the resulting library uses the specified major, minor and
revision numbers. This is designed to permit libtool to be used with
existing projects where identical version numbers are already used across
operating systems. New projects should use the -version-info flag
instead.
- -weak libname
- if output-file is a libtool library, declare that it provides a
weak libname interface. This is a hint to libtool that there is
no need to append libname to the list of dependency libraries of
output-file, because linking against output-file already
supplies the same interface (see Linking with dlopened modules).
- -Wc,flag
- -Xcompiler flag
- Pass a linker-specific flag directly to the compiler. With
-Wc,,
multiple flags may be separated by commas, whereas -Xcompiler
passes through commas unchanged.
- -Wl,flag
- -Xlinker flag
- Pass a linker-specific flag directly to the linker.
- -XCClinker flag
- Pass a link-specific flag to the compiler driver (
CC) during linking.
If the output-file ends in .la, then a libtool library is
created, which must be built only from library objects (.lo files).
The -rpath option is required. In the current implementation,
libtool libraries may not depend on other uninstalled libtool libraries
(see Inter-library dependencies).
If the output-file ends in .a, then a standard library is
created using ar and possibly ranlib.
If output-file ends in .o or .lo, then a reloadable object
file is created from the input files (generally using ‘ld -r’).
This method is often called partial linking.
Otherwise, an executable program is created.