1@c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
2@c This is part of the GCC manual.
3@c For copying conditions, see the file gcc.texi.
4
5@node Collect2
6@chapter @code{collect2}
7
8GCC uses a utility called @code{collect2} on nearly all systems to arrange
9to call various initialization functions at start time.
10
11The program @code{collect2} works by linking the program once and
12looking through the linker output file for symbols with particular names
13indicating they are constructor functions.  If it finds any, it
14creates a new temporary @samp{.c} file containing a table of them,
15compiles it, and links the program a second time including that file.
16
17@findex __main
18@cindex constructors, automatic calls
19The actual calls to the constructors are carried out by a subroutine
20called @code{__main}, which is called (automatically) at the beginning
21of the body of @code{main} (provided @code{main} was compiled with GNU
22CC)@.  Calling @code{__main} is necessary, even when compiling C code, to
23allow linking C and C++ object code together.  (If you use
24@option{-nostdlib}, you get an unresolved reference to @code{__main},
25since it's defined in the standard GCC library.  Include @option{-lgcc} at
26the end of your compiler command line to resolve this reference.)
27
28The program @code{collect2} is installed as @code{ld} in the directory
29where the passes of the compiler are installed.  When @code{collect2}
30needs to find the @emph{real} @code{ld}, it tries the following file
31names:
32
33@itemize @bullet
34@item
35@file{real-ld} in the directories listed in the compiler's search
36directories.
37
38@item
39@file{real-ld} in the directories listed in the environment variable
40@code{PATH}.
41
42@item
43The file specified in the @code{REAL_LD_FILE_NAME} configuration macro,
44if specified.
45
46@item
47@file{ld} in the compiler's search directories, except that
48@code{collect2} will not execute itself recursively.
49
50@item
51@file{ld} in @code{PATH}.
52@end itemize
53
54``The compiler's search directories'' means all the directories where
55@command{gcc} searches for passes of the compiler.  This includes
56directories that you specify with @option{-B}.
57
58Cross-compilers search a little differently:
59
60@itemize @bullet
61@item
62@file{real-ld} in the compiler's search directories.
63
64@item
65@file{@var{target}-real-ld} in @code{PATH}.
66
67@item
68The file specified in the @code{REAL_LD_FILE_NAME} configuration macro,
69if specified.
70
71@item
72@file{ld} in the compiler's search directories.
73
74@item
75@file{@var{target}-ld} in @code{PATH}.
76@end itemize
77
78@code{collect2} explicitly avoids running @code{ld} using the file name
79under which @code{collect2} itself was invoked.  In fact, it remembers
80up a list of such names---in case one copy of @code{collect2} finds
81another copy (or version) of @code{collect2} installed as @code{ld} in a
82second place in the search path.
83
84@code{collect2} searches for the utilities @code{nm} and @code{strip}
85using the same algorithm as above for @code{ld}.
86