Library Naming Conventions
By convention, shared objects are usually
designated by the prefix lib
and the
suffix .so
. Archives are designated by
the prefix lib
and the suffix
.a
. For example,
libfoo.so
is the shared object
version of the "foo"
implementation that is made available to the compilation
environment. libfoo.a
is the library's
archive version.
These conventions are recognized by the -l
option of the link-editor. This option is commonly used to
supply additional libraries to a link-edit. The following
example directs the link-editor to search for
libfoo.so
. If the link-editor
does not find libfoo.so
, a search for
libfoo.a
is made before moving
on to the next directory to be searched.
$ cc -o prog file1.c file2.c -lfoo
Note:
A naming convention exists regarding the compilation environment and the runtime environment use of shared objects. The compilation environment uses the simple.so
suffix,
whereas the runtime environment commonly uses the
suffix with an additional version number. See Naming Conventions and Coordination of Versioned Filenames.
When link-editing in dynamic mode, you can choose to link with a mix of shared objects and archives. When link-editing in static mode, only archive libraries are acceptable for input.
In dynamic mode, when using the -l
option, the
link-editor first searches the given directory for a shared
object that matches the specified name. If no match is
found, the link-editor looks for an archive library in the
same directory. In static mode, when using the
-l
option, only archive libraries
are sought.