Mercurial > hg > CbC > CbC_gcc
annotate gcc/doc/collect2.texi @ 55:77e2b8dfacca gcc-4.4.5
update it from 4.4.3 to 4.5.0
author | ryoma <e075725@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 12 Feb 2010 23:39:51 +0900 |
parents | a06113de4d67 |
children | 04ced10e8804 |
rev | line source |
---|---|
0 | 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 | |
8 GCC uses a utility called @code{collect2} on nearly all systems to arrange | |
9 to call various initialization functions at start time. | |
10 | |
11 The program @code{collect2} works by linking the program once and | |
12 looking through the linker output file for symbols with particular names | |
13 indicating they are constructor functions. If it finds any, it | |
14 creates a new temporary @samp{.c} file containing a table of them, | |
15 compiles it, and links the program a second time including that file. | |
16 | |
17 @findex __main | |
18 @cindex constructors, automatic calls | |
19 The actual calls to the constructors are carried out by a subroutine | |
20 called @code{__main}, which is called (automatically) at the beginning | |
21 of the body of @code{main} (provided @code{main} was compiled with GNU | |
22 CC)@. Calling @code{__main} is necessary, even when compiling C code, to | |
23 allow linking C and C++ object code together. (If you use | |
24 @option{-nostdlib}, you get an unresolved reference to @code{__main}, | |
25 since it's defined in the standard GCC library. Include @option{-lgcc} at | |
26 the end of your compiler command line to resolve this reference.) | |
27 | |
28 The program @code{collect2} is installed as @code{ld} in the directory | |
29 where the passes of the compiler are installed. When @code{collect2} | |
30 needs to find the @emph{real} @code{ld}, it tries the following file | |
31 names: | |
32 | |
33 @itemize @bullet | |
34 @item | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
35 a hard coded linker file name, if GCC was configured with the |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
36 @option{--with-ld} option. |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
37 |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
38 @item |
0 | 39 @file{real-ld} in the directories listed in the compiler's search |
40 directories. | |
41 | |
42 @item | |
43 @file{real-ld} in the directories listed in the environment variable | |
44 @code{PATH}. | |
45 | |
46 @item | |
47 The file specified in the @code{REAL_LD_FILE_NAME} configuration macro, | |
48 if specified. | |
49 | |
50 @item | |
51 @file{ld} in the compiler's search directories, except that | |
52 @code{collect2} will not execute itself recursively. | |
53 | |
54 @item | |
55 @file{ld} in @code{PATH}. | |
56 @end itemize | |
57 | |
58 ``The compiler's search directories'' means all the directories where | |
59 @command{gcc} searches for passes of the compiler. This includes | |
60 directories that you specify with @option{-B}. | |
61 | |
62 Cross-compilers search a little differently: | |
63 | |
64 @itemize @bullet | |
65 @item | |
66 @file{real-ld} in the compiler's search directories. | |
67 | |
68 @item | |
69 @file{@var{target}-real-ld} in @code{PATH}. | |
70 | |
71 @item | |
72 The file specified in the @code{REAL_LD_FILE_NAME} configuration macro, | |
73 if specified. | |
74 | |
75 @item | |
76 @file{ld} in the compiler's search directories. | |
77 | |
78 @item | |
79 @file{@var{target}-ld} in @code{PATH}. | |
80 @end itemize | |
81 | |
82 @code{collect2} explicitly avoids running @code{ld} using the file name | |
83 under which @code{collect2} itself was invoked. In fact, it remembers | |
84 up a list of such names---in case one copy of @code{collect2} finds | |
85 another copy (or version) of @code{collect2} installed as @code{ld} in a | |
86 second place in the search path. | |
87 | |
88 @code{collect2} searches for the utilities @code{nm} and @code{strip} | |
89 using the same algorithm as above for @code{ld}. |