Merge from vendor branch GCC:
[dragonfly.git] / contrib / gcc-3.4 / FAQ
CommitLineData
003757ed
MD
1
2 GCC Frequently Asked Questions
3
1378ea41 4 The latest version of this document is always available at
003757ed
MD
5 [1]http://gcc.gnu.org/faq.html.
6
1378ea41
SS
7 This FAQ tries to answer specific questions concerning GCC. For
8 general information regarding C, C++, resp. Fortran please check the
9 [2]comp.lang.c FAQ, [3]comp.std.c++ FAQ, and the [4]Fortran
003757ed
MD
10 Information page.
11
12 Other GCC-related FAQs: [5]libstdc++-v3, and [6]GCJ.
13 _________________________________________________________________
14
15 Questions
16
17 1. [7]General information
18 1. [8]What is the relationship between GCC and EGCS?
19 2. [9]What is an open development model?
20 3. [10]How do I get a bug fixed or a feature added?
21 4. [11]Does GCC work on my platform?
22 2. [12]Installation
23 1. [13]How to install multiple versions of GCC
24 2. [14]Dynamic linker is unable to find GCC libraries
25 3. [15]libstdc++/libio tests fail badly with --enable-shared
26 4. [16]GCC can not find GNU as/GNU ld
27 5. [17]cpp: Usage:... Error
28 6. [18]Optimizing the compiler itself
29 7. [19]Why does libiconv get linked into jc1 on Solaris?
30 3. [20]Testsuite problems
31 1. [21]How do I pass flags like -fnew-abi to the testsuite?
32 2. [22]How can I run the test suite with multiple options?
33 4. [23]Older versions of GCC
34 1. [24]Is there a stringstream / sstream for GCC 2.95.2?
35 5. [25]Miscellaneous
36 1. [26]Friend Templates
1378ea41 37 2. [27]dynamic_cast, throw, typeid don't work with shared
003757ed
MD
38 libraries
39 3. [28]Why do I need autoconf, bison, xgettext, automake, etc?
40 4. [29]Why can't I build a shared library?
1378ea41
SS
41 5. [30]When building C++, the linker says my constructors,
42 destructors or virtual tables are undefined, but I defined
003757ed
MD
43 them
44 6. [31]Will GCC someday include an incremental linker?
45 _________________________________________________________________
46
47 General information
48
49What is the relationship between GCC and EGCS?
50
1378ea41
SS
51 In 1990/1991 gcc version 1 had reached a point of stability. For the
52 targets it could support, it worked well. It had limitations inherent
53 in its design that would be difficult to resolve, so a major effort
54 was made to resolve those limitations and gcc version 2 was the
003757ed
MD
55 result.
56
1378ea41
SS
57 When we had gcc2 in a useful state, development efforts on gcc1
58 stopped and we all concentrated on making gcc2 better than gcc1 could
59 ever be. This is the kind of step forward we wanted to make with the
003757ed
MD
60 EGCS project when it was formed in 1997.
61
1378ea41 62 In April 1999 the Free Software Foundation officially halted
003757ed 63 development on the gcc2 compiler and appointed the EGCS project as the
1378ea41
SS
64 official GCC maintainers. The net result was a single project which
65 carries forward GCC development under the ultimate control of the
003757ed
MD
66 [32]GCC Steering Committee.
67 _________________________________________________________________
68
69What is an open development model?
70
1378ea41
SS
71 We are using a bazaar style [33][1] approach to GCC development: we
72 make snapshots publicly available to anyone who wants to try them; we
73 welcome anyone to join the development mailing list. All of the
003757ed 74 discussions on the development mailing list are available via the web.
1378ea41 75 We're going to be making releases with a much higher frequency than
003757ed
MD
76 they have been made in the past.
77
1378ea41
SS
78 In addition to weekly snapshots of the GCC development sources, we
79 have the sources readable from an SVN server by anyone. Furthermore we
80 are using SVN to allow maintainers write access to the sources.
003757ed 81
1378ea41
SS
82 There have been many potential GCC developers who were not able to
83 participate in GCC development in the past. We want these people to
84 help in any way they can; we ultimately want GCC to be the best
003757ed
MD
85 compiler in the world.
86
1378ea41
SS
87 A compiler is a complicated piece of software, there will still be
88 strong central maintainers who will reject patches, who will demand
89 documentation of implementations, and who will keep the level of
90 quality as high as it is today. Code that could use wider testing may
003757ed
MD
91 be integrated--code that is simply ill-conceived won't be.
92
1378ea41
SS
93 GCC is not the first piece of software to use this open development
94 process; FreeBSD, the Emacs lisp repository, and the Linux kernel are
003757ed
MD
95 a few examples of the bazaar style of development.
96
1378ea41
SS
97 With GCC, we are adding new features and optimizations at a rate that
98 has not been done since the creation of gcc2; these additions
99 inevitably have a temporarily destabilizing effect. With the help of
100 developers working together with this bazaar style development, the
101 resulting stability and quality levels will be better than we've had
003757ed
MD
102 before.
103
1378ea41 104 [1] We've been discussing different development models a lot over
003757ed 105 the past few months. The paper which started all of this introduced
1378ea41
SS
106 two terms: A cathedral development model versus a bazaar
107 development model. The paper is written by Eric S. Raymond, it is
108 called ``The Cathedral and the Bazaar''. The paper is a useful
003757ed
MD
109 starting point for discussions.
110 _________________________________________________________________
111
112How do I get a bug fixed or a feature added?
113
1378ea41
SS
114 There are lots of ways to get something fixed. The list below may be
115 incomplete, but it covers many of the common cases. These are listed
116 roughly in order of decreasing difficulty for the average GCC user,
117 meaning someone who is not skilled in the internals of GCC, and where
118 difficulty is measured in terms of the time required to fix the bug.
119 No alternative is better than any other; each has its benefits and
003757ed 120 disadvantages.
1378ea41
SS
121 * Fix it yourself. This alternative will probably bring results, if
122 you work hard enough, but will probably take a lot of time, and,
123 depending on the quality of your work and the perceived benefits
124 of your changes, your code may or may not ever make it into an
003757ed 125 official release of GCC.
1378ea41
SS
126 * [34]Report the problem to the GCC bug tracking system and hope
127 that someone will be kind enough to fix it for you. While this is
128 certainly possible, and often happens, there is no guarantee that
129 it will. You should not expect the same response from this method
130 that you would see from a commercial support organization since
131 the people who read GCC bug reports, if they choose to help you,
003757ed 132 will be volunteering their time.
1378ea41
SS
133 * Hire someone to fix it for you. There are various companies and
134 individuals providing support for GCC. This alternative costs
003757ed
MD
135 money, but is relatively likely to get results.
136 _________________________________________________________________
137
138Does GCC work on my platform?
139
1378ea41
SS
140 The host/target specific installation notes for GCC include
141 information about known problems with installing or using GCC on
142 particular platforms. These are included in the sources for a release
143 in INSTALL/specific.html, and the [35]latest version is always
144 available at the GCC web site. Reports of [36]successful builds for
003757ed
MD
145 several versions of GCC are also available at the web site.
146 _________________________________________________________________
147
148 Installation
149
150How to install multiple versions of GCC
151
1378ea41
SS
152 It may be desirable to install multiple versions of the compiler on
153 the same system. This can be done by using different prefix paths at
003757ed
MD
154 configure time and a few symlinks.
155
1378ea41
SS
156 Basically, configure the two compilers with different --prefix
157 options, then build and install each compiler. Assume you want "gcc"
003757ed 158 to be the latest compiler and available in /usr/local/bin; also assume
1378ea41 159 that you want "gcc2" to be the older gcc2 compiler and also available
003757ed
MD
160 in /usr/local/bin.
161
1378ea41
SS
162 The easiest way to do this is to configure the new GCC with
163 --prefix=/usr/local/gcc and the older gcc2 with
164 --prefix=/usr/local/gcc2. Build and install both compilers. Then make
165 a symlink from /usr/local/bin/gcc to /usr/local/gcc/bin/gcc and from
166 /usr/local/bin/gcc2 to /usr/local/gcc2/bin/gcc. Create similar links
003757ed
MD
167 for the "g++", "c++" and "g77" compiler drivers.
168
1378ea41
SS
169 An alternative to using symlinks is to configure with a
170 --program-transform-name option. This option specifies a sed command
171 to process installed program names with. Using it you can, for
003757ed 172 instance, have all the new GCC programs installed as "new-gcc" and the
1378ea41
SS
173 like. You will still have to specify different --prefix options for
174 new GCC and old GCC, because it is only the executable program names
003757ed 175 that are transformed. The difference is that you (as administrator) do
1378ea41 176 not have to set up symlinks, but must specify additional directories
003757ed 177 in your (as a user) PATH. A complication with --program-transform-name
1378ea41
SS
178 is that the sed command invariably contains characters significant to
179 the shell, and these have to be escaped correctly, also it is not
180 possible to use "^" or "$" in the command. Here is the option to
003757ed
MD
181 prefix "new-" to the new GCC installed programs:
182
183 --program-transform-name='s,\\\\(.*\\\\),new-\\\\1,'
184
185 With the above --prefix option, that will install the new GCC programs
1378ea41
SS
186 into /usr/local/gcc/bin with names prefixed by "new-". You can use
187 --program-transform-name if you have multiple versions of GCC, and
003757ed
MD
188 wish to be sure about which version you are invoking.
189
1378ea41
SS
190 If you use --prefix, GCC may have difficulty locating a GNU assembler
191 or linker on your system, [37]GCC can not find GNU as/GNU ld explains
003757ed
MD
192 how to deal with this.
193
1378ea41
SS
194 Another option that may be easier is to use the --program-prefix= or
195 --program-suffix= options to configure. So if you're installing GCC
196 2.95.2 and don't want to disturb the current version of GCC in
003757ed
MD
197 /usr/local/bin/, you could do
198
199 configure --program-suffix=-2.95.2 <other configure options>
200
201 This should result in GCC being installed as /usr/local/bin/gcc-2.95.2
202 instead of /usr/local/bin/gcc.
203 _________________________________________________________________
204
205Dynamic linker is unable to find GCC libraries
206
207 This problem manifests itself by programs not finding shared libraries
1378ea41
SS
208 they depend on when the programs are started. Note this problem often
209 manifests itself with failures in the libio/libstdc++ tests after
003757ed
MD
210 configuring with --enable-shared and building GCC.
211
1378ea41 212 GCC does not specify a runpath so that the dynamic linker can find
003757ed
MD
213 dynamic libraries at runtime.
214
1378ea41
SS
215 The short explanation is that if you always pass a -R option to the
216 linker, then your programs become dependent on directories which may
003757ed
MD
217 be NFS mounted, and programs may hang unnecessarily when an NFS server
218 goes down.
219
1378ea41
SS
220 The problem is not programs that do require the directories; those
221 programs are going to hang no matter what you do. The problem is
003757ed
MD
222 programs that do not require the directories.
223
1378ea41
SS
224 SunOS effectively always passed a -R option for every -L option; this
225 was a bad idea, and so it was removed for Solaris. We should not
003757ed
MD
226 recreate it.
227
1378ea41
SS
228 However, if you feel you really need such an option to be passed
229 automatically to the linker, you may add it to the GCC specs file.
230 This file can be found in the same directory that contains cc1 (run
003757ed 231 gcc -print-prog-name=cc1 to find it). You may add linker flags such as
1378ea41 232 -R or -rpath, depending on platform and linker, to the *link or *lib
003757ed
MD
233 specs.
234
1378ea41
SS
235 Another alternative is to install a wrapper script around gcc, g++ or
236 ld that adds the appropriate directory to the environment variable
003757ed
MD
237 LD_RUN_PATH or equivalent (again, it's platform-dependent).
238
239 Yet another option, that works on a few platforms, is to hard-code the
1378ea41
SS
240 full pathname of the library into its soname. This can only be
241 accomplished by modifying the appropriate .ml file within
003757ed 242 libstdc++/config (and also libg++/config, if you are building libg++),
1378ea41 243 so that $(libdir)/ appears just before the library name in -soname or
003757ed
MD
244 -h options.
245 _________________________________________________________________
246
247GCC can not find GNU as/GNU ld
248
1378ea41 249 GCC searches the PATH for an assembler and a loader, but it only does
003757ed 250 so after searching a directory list hard-coded in the GCC executables.
1378ea41
SS
251 Since, on most platforms, the hard-coded list includes directories in
252 which the system assembler and loader can be found, you may have to
253 take one of the following actions to arrange that GCC uses the GNU
003757ed
MD
254 versions of those programs.
255
256 To ensure that GCC finds the GNU assembler (the GNU loader), which are
1378ea41 257 required by [38]some configurations, you should configure these with
003757ed
MD
258 the same --prefix option as you used for GCC. Then build & install GNU
259 as (GNU ld) and proceed with building GCC.
260
1378ea41
SS
261 Another alternative is to create links to GNU as and ld in any of the
262 directories printed by the command `gcc -print-search-dirs | grep
263 '^programs:''. The link to `ld' should be named `real-ld' if `ld'
003757ed 264 already exists. If such links do not exist while you're compiling GCC,
1378ea41 265 you may have to create them in the build directories too, within the
003757ed
MD
266 gcc directory and in all the gcc/stage* subdirectories.
267
1378ea41 268 GCC 2.95 allows you to specify the full pathname of the assembler and
003757ed 269 the linker to use. The configure flags are `--with-as=/path/to/as' and
1378ea41
SS
270 `--with-ld=/path/to/ld'. GCC will try to use these pathnames before
271 looking for `as' or `(real-)ld' in the standard search dirs. If, at
272 configure-time, the specified programs are found to be GNU utilities,
003757ed 273 `--with-gnu-as' and `--with-gnu-ld' need not be used; these flags will
1378ea41
SS
274 be auto-detected. One drawback of this option is that it won't allow
275 you to override the search path for assembler and linker with
003757ed
MD
276 command-line options -B/path/ if the specified filenames exist.
277 _________________________________________________________________
278
279cpp: Usage:... Error
280
1378ea41
SS
281 If you get an error like this when building GCC (particularly when
282 building __mulsi3), then you likely have a problem with your
003757ed
MD
283 environment variables.
284 cpp: Usage: /usr/lib/gcc-lib/i586-unknown-linux-gnulibc1/2.7.2.3/cpp
285 [switches] input output
286
1378ea41
SS
287 First look for an explicit '.' in either LIBRARY_PATH or
288 GCC_EXEC_PREFIX from your environment. If you do not find an explicit
289 '.', look for an empty pathname in those variables. Note that ':' at
003757ed
MD
290 either the start or end of these variables is an implicit '.' and will
291 cause problems.
292
293 Also note '::' in these paths will also cause similar problems.
294 _________________________________________________________________
295
296Optimizing the compiler itself
297
1378ea41
SS
298 If you want to test a particular optimization option, it's useful to
299 try bootstrapping the compiler with that option turned on. For
003757ed
MD
300 example, to test the -fssa option, you could bootstrap like this:
301make BOOT_CFLAGS="-O2 -fssa" bootstrap
302 _________________________________________________________________
303
304Why does libiconv get linked into jc1 on Solaris?
305
1378ea41
SS
306 The Java front end requires iconv. If the compiler used to bootstrap
307 GCC finds libiconv (because the GNU version of libiconv has been
003757ed
MD
308 installed in the same prefix as the bootstrap compiler), but the newly
309 built GCC does not find the library (because it will be installed with
1378ea41
SS
310 a different prefix), then a link-time error will occur when building
311 jc1. This problem does not show up so often on platforms that have
312 libiconv in a default location (like /usr/lib) because then both
313 compilers can find a library named libiconv, even though it is a
003757ed
MD
314 different library.
315
1378ea41
SS
316 Using --disable-nls at configure-time does not prevent this problem
317 because jc1 uses iconv even in that case. Solutions include
318 temporarily removing the GNU libiconv, copying it to a default
319 location such as /usr/lib/, and using --enable-languages at
003757ed
MD
320 configure-time to disable Java.
321 _________________________________________________________________
322
323 Testsuite problems
324
325How do I pass flags like -fnew-abi to the testsuite?
326
1378ea41 327 If you invoke runtest directly, you can use the --tool_opts option,
003757ed
MD
328 e.g:
329 runtest --tool_opts "-fnew-abi -fno-honor-std" <other options>
330
1378ea41 331 Or, if you use make check you can use the make variable RUNTESTFLAGS,
003757ed
MD
332 e.g:
333 make RUNTESTFLAGS="--tool_opts '-fnew-abi -fno-honor-std'" check-g++
334 _________________________________________________________________
335
336How can I run the test suite with multiple options?
337
338 If you invoke runtest directly, you can use the --target_board option,
339 e.g:
340 runtest --target_board "unix{-fPIC,-fpic,}" <other options>
341
1378ea41 342 Or, if you use make check you can use the make variable RUNTESTFLAGS,
003757ed
MD
343 e.g:
344 make RUNTESTFLAGS="--target_board 'unix{-fPIC,-fpic,}'" check-gcc
345
1378ea41 346 Either of these examples will run the tests three times. Once with
003757ed
MD
347 -fPIC, once with -fpic, and once with no additional flags.
348
349 This technique is particularly useful on multilibbed targets.
350 _________________________________________________________________
351
352 Older versions of GCC and EGCS
353
354Is there a stringstream / sstream for GCC 2.95.2?
355
356 Yes, it's at:
357 [39]http://gcc.gnu.org/ml/libstdc++/2000-q2/msg00700/sstream.
358 _________________________________________________________________
359
360 Miscellaneous
361
362Friend Templates
363
364 In order to make a specialization of a template function a friend of a
1378ea41
SS
365 (possibly template) class, you must explicitly state that the friend
366 function is a template, by appending angle brackets to its name, and
367 this template function must have been declared already. Here's an
003757ed
MD
368 example:
369template <typename T> class foo {
370 friend void bar(foo<T>);
371}
372
1378ea41
SS
373 The above declaration declares a non-template function named bar, so
374 it must be explicitly defined for each specialization of foo. A
375 template definition of bar won't do, because it is unrelated with the
003757ed
MD
376 non-template declaration above. So you'd have to end up writing:
377void bar(foo<int>) { /* ... */ }
378void bar(foo<void>) { /* ... */ }
379
1378ea41 380 If you meant bar to be a template function, you should have
003757ed 381 forward-declared it as follows. Note that, since the template function
1378ea41 382 declaration refers to the template class, the template class must be
003757ed
MD
383 forward-declared too:
384template <typename T>
385class foo;
386
387template <typename T>
388void bar(foo<T>);
389
390template <typename T>
391class foo {
392 friend void bar<>(foo<T>);
393};
394
395template <typename T>
396void bar(foo<T>) { /* ... */ }
397
1378ea41
SS
398 In this case, the template argument list could be left empty, because
399 it can be implicitly deduced from the function arguments, but the
400 angle brackets must be present, otherwise the declaration will be
401 taken as a non-template function. Furthermore, in some cases, you may
402 have to explicitly specify the template arguments, to remove
003757ed
MD
403 ambiguity.
404
405 An error in the last public comment draft of the ANSI/ISO C++ Standard
1378ea41
SS
406 and the fact that previous releases of GCC would accept such friend
407 declarations as template declarations has led people to believe that
003757ed
MD
408 the forward declaration was not necessary, but, according to the final
409 version of the Standard, it is.
410 _________________________________________________________________
411
412dynamic_cast, throw, typeid don't work with shared libraries
413
414 The new C++ ABI in the GCC 3.0 series uses address comparisons, rather
415 than string compares, to determine type equality. This leads to better
1378ea41
SS
416 performance. Like other objects that have to be present in the final
417 executable, these std::type_info objects have what is called vague
418 linkage because they are not tightly bound to any one particular
419 translation unit (object file). The compiler has to emit them in any
420 translation unit that requires their presence, and then rely on the
421 linking and loading process to make sure that only one of them is
422 active in the final executable. With static linking all of these
423 symbols are resolved at link time, but with dynamic linking, further
003757ed 424 resolution occurs at load time. You have to ensure that objects within
1378ea41 425 a shared library are resolved against objects in the executable and
003757ed 426 other shared libraries.
1378ea41 427 * For a program which is linked against a shared library, no
3a327f56 428 additional precautions are needed.
1378ea41 429 * You cannot create a shared library with the "-Bsymbolic" option,
003757ed 430 as that prevents the resolution described above.
1378ea41
SS
431 * If you use dlopen to explicitly load code from a shared library,
432 you must do several things. First, export global symbols from the
433 executable by linking it with the "-E" flag (you will have to
434 specify this as "-Wl,-E" if you are invoking the linker in the
435 usual manner from the compiler driver, g++). You must also make
436 the external symbols in the loaded library available for
437 subsequent libraries by providing the RTLD_GLOBAL flag to dlopen.
003757ed
MD
438 The symbol resolution can be immediate or lazy.
439
1378ea41 440 Template instantiations are another, user visible, case of objects
003757ed 441 with vague linkage, which needs similar resolution. If you do not take
1378ea41
SS
442 the above precautions, you may discover that a template instantiation
443 with the same argument list, but instantiated in multiple translation
444 units, has several addresses, depending in which translation unit the
445 address is taken. (This is not an exhaustive list of the kind of
446 objects which have vague linkage and are expected to be resolved
003757ed
MD
447 during linking & loading.)
448
1378ea41
SS
449 If you are worried about different objects with the same name
450 colliding during the linking or loading process, then you should use
451 namespaces to disambiguate them. Giving distinct objects with global
452 linkage the same name is a violation of the One Definition Rule (ODR)
003757ed
MD
453 [basic.def.odr].
454
455 For more details about the way that GCC implements these and other C++
1378ea41
SS
456 features, please read the [40]ABI specification. Note the
457 std::type_info objects which must be resolved all begin with "_ZTS".
458 Refer to ld's documentation for a description of the "-E" &
003757ed
MD
459 "-Bsymbolic" flags.
460 _________________________________________________________________
461
462Why do I need autoconf, bison, xgettext, automake, etc?
463
1378ea41
SS
464 If you're using diffs up dated from one snapshot to the next, or if
465 you're using the SVN repository, you may need several additional
003757ed
MD
466 programs to build GCC.
467
1378ea41 468 These include, but are not necessarily limited to autoconf, automake,
003757ed
MD
469 bison, and xgettext.
470
1378ea41
SS
471 This is necessary because neither diff nor cvs keep timestamps
472 correct. This causes problems for generated files as "make" may think
003757ed
MD
473 those generated files are out of date and try to regenerate them.
474
1378ea41
SS
475 An easy way to work around this problem is to use the gcc_update
476 script in the contrib subdirectory of GCC, which handles this
477 transparently without requiring installation of any additional tools.
003757ed 478
1378ea41 479 When building from diffs or SVN or if you modified some sources, you
003757ed 480 may also need to obtain development versions of some GNU tools, as the
1378ea41 481 production versions do not necessarily handle all features needed to
003757ed
MD
482 rebuild GCC.
483
1378ea41 484 In general, the current versions of these tools from
003757ed
MD
485 [41]ftp://ftp.gnu.org/gnu/ will work. At present, Autoconf 2.50 is not
486 supported, and you will need to use Autoconf 2.13; work is in progress
487 to fix this problem. Also look at
488 [42]ftp://gcc.gnu.org/pub/gcc/infrastructure/ for any special versions
489 of packages.
490 _________________________________________________________________
491
492Why can't I build a shared library?
493
1378ea41 494 When building a shared library you may get an error message from the
003757ed
MD
495 linker like `assert pure-text failed:' or `DP relative code in file'.
496
1378ea41 497 This kind of error occurs when you've failed to provide proper flags
003757ed
MD
498 to gcc when linking the shared library.
499
500 You can get this error even if all the .o files for the shared library
1378ea41
SS
501 were compiled with the proper PIC option. When building a shared
502 library, gcc will compile additional code to be included in the
503 library. That additional code must also be compiled with the proper
003757ed
MD
504 PIC option.
505
1378ea41
SS
506 Adding the proper PIC option (-fpic or -fPIC) to the link line which
507 creates the shared library will fix this problem on targets that
003757ed
MD
508 support PIC in this manner. For example:
509 gcc -c -fPIC myfile.c
510 gcc -shared -o libmyfile.so -fPIC myfile.o
511 _________________________________________________________________
512
513When building C++, the linker says my constructors, destructors or virtual
514tables are undefined, but I defined them
515
1378ea41
SS
516 The ISO C++ Standard specifies that all virtual methods of a class
517 that are not pure-virtual must be defined, but does not require any
518 diagnostic for violations of this rule [class.virtual]/8. Based on
519 this assumption, GCC will only emit the implicitly defined
520 constructors, the assignment operator, the destructor and the virtual
521 table of a class in the translation unit that defines its first such
003757ed
MD
522 non-inline method.
523
1378ea41
SS
524 Therefore, if you fail to define this particular method, the linker
525 may complain about the lack of definitions for apparently unrelated
526 symbols. Unfortunately, in order to improve this error message, it
527 might be necessary to change the linker, and this can't always be
003757ed
MD
528 done.
529
1378ea41
SS
530 The solution is to ensure that all virtual methods that are not pure
531 are defined. Note that a destructor must be defined even if it is
003757ed
MD
532 declared pure-virtual [class.dtor]/7.
533 _________________________________________________________________
534
535Will GCC someday include an incremental linker?
536
1378ea41 537 Incremental linking is part of the linker, not the compiler. As such,
003757ed 538 GCC doesn't have anything to do with incremental linking. Depending on
1378ea41 539 what platform you use, it may be possible to tell GCC to use the
003757ed
MD
540 platform's native linker (e.g., Solaris' ild(1)).
541
542References
543
544 1. http://gcc.gnu.org/faq.html
1378ea41 545 2. http://c-faq.com/
003757ed
MD
546 3. http://www.jamesd.demon.co.uk/csc/faq.html
547 4. http://www.fortran.com/fortran/info.html
548 5. http://gcc.gnu.org/onlinedocs/libstdc++/faq/index.html
549 6. http://gcc.gnu.org/java/faq.html
550 7. http://gcc.gnu.org/faq.html#general
551 8. http://gcc.gnu.org/faq.html#gcc
552 9. http://gcc.gnu.org/faq.html#open-development
553 10. http://gcc.gnu.org/faq.html#support
554 11. http://gcc.gnu.org/faq.html#platforms
555 12. http://gcc.gnu.org/faq.html#installation
556 13. http://gcc.gnu.org/faq.html#multiple
557 14. http://gcc.gnu.org/faq.html#rpath
558 15. http://gcc.gnu.org/faq.html#rpath
559 16. http://gcc.gnu.org/faq.html#gas
560 17. http://gcc.gnu.org/faq.html#environ
561 18. http://gcc.gnu.org/faq.html#optimizing
562 19. http://gcc.gnu.org/faq.html#iconv
563 20. http://gcc.gnu.org/faq.html#testsuite
564 21. http://gcc.gnu.org/faq.html#testoptions
565 22. http://gcc.gnu.org/faq.html#multipletests
566 23. http://gcc.gnu.org/faq.html#old
567 24. http://gcc.gnu.org/faq.html#2.95sstream
568 25. http://gcc.gnu.org/faq.html#misc
569 26. http://gcc.gnu.org/faq.html#friend
570 27. http://gcc.gnu.org/faq.html#dso
571 28. http://gcc.gnu.org/faq.html#generated_files
572 29. http://gcc.gnu.org/faq.html#picflag-needed
573 30. http://gcc.gnu.org/faq.html#vtables
574 31. http://gcc.gnu.org/faq.html#incremental
575 32. http://gcc.gnu.org/steering.html
576 33. http://gcc.gnu.org/faq.html#cathedral-vs-bazaar
577 34. http://gcc.gnu.org/bugs.html
578 35. http://gcc.gnu.org/install/specific.html
579 36. http://gcc.gnu.org/buildstat.html
580 37. http://gcc.gnu.org/faq.html#gas
581 38. http://gcc.gnu.org/install/specific.html
582 39. http://gcc.gnu.org/ml/libstdc++/2000-q2/msg00700/sstream
583 40. http://www.codesourcery.com/cxx-abi/
584 41. ftp://ftp.gnu.org/gnu/
585 42. ftp://gcc.gnu.org/pub/gcc/infrastructure/