Defining Additional Symbols with the -u
option
The -u
option provides a
mechanism for generating a global symbol reference from the
link-edit command line. This option can be used to perform a
link-edit entirely from archives. This option can also
provide additional flexibility in selecting the objects to
extract from multiple archives. See Archive Processing for an
overview of archive extraction.
For example, perhaps you want to generate a dynamic executable
from the relocatable object main.o
,
which refers to the symbols foo
and
bar
. You want to obtain the
symbol definition foo
from the
relocatable object foo.o
contained in
lib1.a
, and the symbol
definition bar
from the relocatable
object bar.o
, contained in
lib2.a
.
However, the archive lib1.a
also contains
a relocatable object that defines the symbol
bar
. This relocatable object is
presumably of differing functionality to the relocatable
object that is provided in lib2.a
. To
specify the required archive extraction, you can use the
following link-edit.
$ cc -o prog -L. -u foo -l1 main.o -l2
The -u
option generates a reference to the
symbol foo
. This reference causes
extraction of the relocatable object
foo.o
from the archive
lib1.a
. The first reference to
the symbol bar
occurs in
main.o
, which is encountered
after lib1.a
has been processed.
Therefore, the relocatable object bar.o
is obtained from the archive
lib2.a
.
Note:
This simple example assumes that the relocatable objectfoo.o
from
lib1.a
does not directly or
indirectly reference the symbol
bar
. If
lib1.a
does reference
bar
, then the relocatable
object bar.o
is also extracted
from lib1.a
during its
processing. See Archive Processing for a discussion of the
link-editor's multi-pass processing of an
archive.