OpenCores
URL https://opencores.org/ocsvn/scarts/scarts/trunk

Subversion Repositories scarts

[/] [scarts/] [trunk/] [toolchain/] [scarts-gcc/] [gcc-4.1.1/] [faq.html] - Blame information for rev 21

Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.