Contents|Index|Previous|Next
collect2
and cross-compiling
Many target systems do not
have support in the assembler and linker for “constructors”—initialization
functions to be called before the official “start” of main.
On such systems, GNU CC uses a utility called collect2
to arrange to call these functions at start time.
The program collect2
works by linking the program once and looking through the linker output
file for symbols with particular names indicating they are constructor
functions. If it finds any, it creates a new temporary ‘.c’
file containing a table of them, compiles it, and links the program a second
time including that file.
The actual calls to the constructors
are carried out by a subroutine called __main,
which is called (automatically) at the beginning of the body of main (provided
main
was compiled with GNU CC).
Calling __main
is necessary, even when compiling C code, to allow linking C and C++ object
code together. (If you use ‘-nostdlib’,
you get an unresolved reference to __main,
since it’s defined in the standard gcc
library. Include ‘-lgcc’
at the end of your compiler command line to resolve this reference.)
The program, collect2,
is installed as ‘ld’
in the directory where the passes of the compiler are installed. When collect2
needs to find the real ‘ld’,
it tries the following filenames.
-
‘real-ld’
in the directories listed in the compiler’s search directories.
-
‘real-ld’
in the directories listed in the environment variable PATH.
-
The file specified in the REAL_LD_FILE_NAME
configuration macro, if specified.
-
‘ld’
in the compiler’s search directories, except that collect2
will not execute itself recursively.
-
‘ld’
in PATH.
“The compiler’s search directories”
means all the directories where gcc
searches for passes of the compiler. This includes directories that you
specify with ‘-B’.
Cross-compilers search a
little differently, using the following filenames.
-
‘real-ld’
in the compiler’s search directories.
-
‘target-real-ld’
in PATH.
-
The file specified in the REAL_LD_FILE_NAME
configuration macro, if specified.
-
‘ld’
in the compiler’s search directories.
-
‘target-ld’
in PATH.
collect2
explicitly avoids running ld
using the filename under which collect2
itself was invoked. In fact, it remembers up a list of such names—in case
one copy of collect2
finds another copy (or version) of collect2
installed as ‘ld’
in a second place in the search path.
collect2
searches for the utilities, nm
and strip,
using the same algorithm as previous installation for ‘ld’.
Top|Contents|Index|Previous|Next