(gccint.info.gz) Collect2
Info Catalog
(gccint.info.gz) Fragments
(gccint.info.gz) Top
(gccint.info.gz) Header Dirs
20 `collect2'
*************
GCC uses a utility called `collect2' on nearly all systems to arrange
to call various initialization 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 file names:
* `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:
* `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 file name 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 above for `ld'.
Info Catalog
(gccint.info.gz) Fragments
(gccint.info.gz) Top
(gccint.info.gz) Header Dirs
automatically generated by
info2html