index.html: Explain libsupc++, mention 'long long' bugfixes on Solaris.
2001-11-07 Phil Edwards <pme@gcc.gnu.org> * docs/html/faq/index.html: Explain libsupc++, mention 'long long' bugfixes on Solaris. * docs/html/faq/index.txt: Regenerate. From-SVN: r46828
This commit is contained in:
parent
2a6f0eca17
commit
64ef1ee2d5
3 changed files with 448 additions and 315 deletions
|
@ -1,3 +1,9 @@
|
||||||
|
2001-11-07 Phil Edwards <pme@gcc.gnu.org>
|
||||||
|
|
||||||
|
* docs/html/faq/index.html: Explain libsupc++, mention 'long long'
|
||||||
|
bugfixes on Solaris.
|
||||||
|
* docs/html/faq/index.txt: Regenerate.
|
||||||
|
|
||||||
2001-11-06 Phil Edwards <pme@gcc.gnu.org>
|
2001-11-06 Phil Edwards <pme@gcc.gnu.org>
|
||||||
|
|
||||||
* acinclude.m4 (GLIBCPP_ENABLE_LONG_LONG): Run the test in
|
* acinclude.m4 (GLIBCPP_ENABLE_LONG_LONG): Run the test in
|
||||||
|
|
|
@ -45,6 +45,7 @@ http://gcc.gnu.org/onlinedocs/libstdc++/faq/</a>.</p>
|
||||||
<li><a href="#2_3">What is this CVS thing that you keep
|
<li><a href="#2_3">What is this CVS thing that you keep
|
||||||
mentioning?</a>
|
mentioning?</a>
|
||||||
<li><a href="#2_4">How do I know if it works?</a>
|
<li><a href="#2_4">How do I know if it works?</a>
|
||||||
|
<li><a href="#2_5">This library is HUGE! And what's libsupc++?</a>
|
||||||
</ol>
|
</ol>
|
||||||
|
|
||||||
<li><a href="#3_0">Platform-Specific Issues</a>
|
<li><a href="#3_0">Platform-Specific Issues</a>
|
||||||
|
@ -53,6 +54,7 @@ http://gcc.gnu.org/onlinedocs/libstdc++/faq/</a>.</p>
|
||||||
favorite compiler>?</a>
|
favorite compiler>?</a>
|
||||||
<li><a href="#3_2">[removed]</a>
|
<li><a href="#3_2">[removed]</a>
|
||||||
<li><a href="#3_3">Building under DEC OSF kills the assembler</a>
|
<li><a href="#3_3">Building under DEC OSF kills the assembler</a>
|
||||||
|
<li><a href="#3_4">I can't use 'long long' on Solaris</a>
|
||||||
</ol>
|
</ol>
|
||||||
|
|
||||||
<li><a href="#4_0">Known Bugs and Non-Bugs</a>
|
<li><a href="#4_0">Known Bugs and Non-Bugs</a>
|
||||||
|
@ -320,6 +322,56 @@ which is no longer available, thanks deja...-->
|
||||||
<strong>please</strong> write up your idea and send it to the list!
|
<strong>please</strong> write up your idea and send it to the list!
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
<h2><a name="2_5">2.4 This library is HUGE! And what's libsupc++?</a></h2>
|
||||||
|
<p>Usually the size of libraries on disk isn't noticeable. When a
|
||||||
|
link editor (or simply "linker") pulls things from a
|
||||||
|
static archive library, only the necessary object files are copied
|
||||||
|
into your executable, not the entire library. Unfortunately, even
|
||||||
|
if you only need a single function or variable from an object file,
|
||||||
|
the entire object file is extracted. (There's nothing unique to C++
|
||||||
|
or libstdc++-v3 about this; it's just common behavior, given here
|
||||||
|
for background reasons.)
|
||||||
|
</p>
|
||||||
|
<p>Some of the object files which make up libstdc++.a are rather large.
|
||||||
|
If you create a statically-linked executable with
|
||||||
|
<code> -static</code>, those large object files are suddenly part
|
||||||
|
of your executable. Historically the best way around this was to
|
||||||
|
only place a very few functions (often only a single one) in each
|
||||||
|
source/object file; then extracting a single function is the same
|
||||||
|
as extracting a single .o file. For libstdc++-v3 this is only
|
||||||
|
possible to a certain extent; the object files in question contain
|
||||||
|
template classes and template functions, pre-instantiated, and
|
||||||
|
splitting those up causes severe maintenance headaches.
|
||||||
|
</p>
|
||||||
|
<p>It's not a bug, and it's not really a problem. Nevertheless, some
|
||||||
|
people don't like it, so here are two pseudo-solutions:
|
||||||
|
</p>
|
||||||
|
<p>If the only functions from libstdc++.a which you need are language
|
||||||
|
support functions (those listed in
|
||||||
|
<a href="../18_support/howto.html">clause 18</a> of the standard,
|
||||||
|
e.g., <code>new</code> and <code>delete</code>), then try linking
|
||||||
|
against <code>libsupc++.a</code> (usually specifying
|
||||||
|
<code>-lsupc++</code> when calling g++ for the final link step will
|
||||||
|
do it). This library contains only those support routines, one per
|
||||||
|
object file. But if you are using anything from the rest of the
|
||||||
|
library, such as IOStreams or vectors, then you'll still need
|
||||||
|
pieces from <code>libstdc++.a</code>.
|
||||||
|
</p>
|
||||||
|
<p>The second method is one we hope to incorporate into the library
|
||||||
|
build process. Some platforms can place each function and variable
|
||||||
|
into its own section in a .o file. The GNU linker can then perform
|
||||||
|
garbage collection on unused sections; this reduces the situation
|
||||||
|
to only copying needed functions into the executable, as before,
|
||||||
|
but all happens automatically.
|
||||||
|
</p>
|
||||||
|
<p>Unfortunately the garbage collection in GNU ld is buggy; sections
|
||||||
|
(corresponding to functions and variables) which <em>are</em> used
|
||||||
|
are mistakenly removed, leading to horrible crashes when your
|
||||||
|
executable starts up. For the time being, this feature is not used
|
||||||
|
when building the library.
|
||||||
|
</p>
|
||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
<h1><a name="3_0">3.0 Platform-Specific Issues</a></h1>
|
<h1><a name="3_0">3.0 Platform-Specific Issues</a></h1>
|
||||||
<h2><a name="3_1">3.1 Can libstdc++-v3 be used with <my
|
<h2><a name="3_1">3.1 Can libstdc++-v3 be used with <my
|
||||||
|
@ -363,6 +415,18 @@ which is no longer available, thanks deja...-->
|
||||||
these two pseudos would win praise and accolades from many.
|
these two pseudos would win praise and accolades from many.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
<h2><a name="3_4">3.4 I can't use 'long long' on Solaris</a></h2>
|
||||||
|
<p>By default we try to support the C99 <code>long long</code> type.
|
||||||
|
This requires that certain functions from your C library be present.
|
||||||
|
</p>
|
||||||
|
<p>Up through release 3.0.2 the tests performed were too general, and
|
||||||
|
this feature was disabled when it did not need to be. The most
|
||||||
|
commonly reported platform affected was Solaris.
|
||||||
|
</p>
|
||||||
|
<p>This has been fixed for 3.0.3 and onwards.
|
||||||
|
</p>
|
||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
<h1><a name="4_0">4.0 Known Bugs and Non-Bugs</a></h1>
|
<h1><a name="4_0">4.0 Known Bugs and Non-Bugs</a></h1>
|
||||||
<em>Note that this section can get rapdily outdated -- such is the
|
<em>Note that this section can get rapdily outdated -- such is the
|
||||||
|
@ -380,10 +444,9 @@ which is no longer available, thanks deja...-->
|
||||||
specifically the part about configuring in a separate build directory,
|
specifically the part about configuring in a separate build directory,
|
||||||
and how strongly recommended it is. Building in the source directory
|
and how strongly recommended it is. Building in the source directory
|
||||||
is fragile, is rarely tested, and tends to break, as in this case.
|
is fragile, is rarely tested, and tends to break, as in this case.
|
||||||
Work has already gone into the source tree to make this less painful
|
This was fixed for 3.0.2.
|
||||||
for the next release.
|
|
||||||
</p>
|
</p>
|
||||||
<p><strong>Please do not report this as a bug. We know about it.</strong>
|
<p><strong>Please do not report these as bugs. We know about them.</strong>
|
||||||
Reporting this -- or any other problem that's already been fixed --
|
Reporting this -- or any other problem that's already been fixed --
|
||||||
hinders the development of GCC, because we have to take time to
|
hinders the development of GCC, because we have to take time to
|
||||||
respond to your report. Thank you.
|
respond to your report. Thank you.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
|
|
||||||
libstdc++ Frequently Asked Questions
|
libstdc++ Frequently Asked Questions
|
||||||
|
|
||||||
The latest version of this document is always available at
|
The latest version of this document is always available at
|
||||||
[1]http://gcc.gnu.org/onlinedocs/libstdc++/faq/.
|
[1]http://gcc.gnu.org/onlinedocs/libstdc++/faq/.
|
||||||
|
|
||||||
To the [2]libstdc++-v3 homepage.
|
To the [2]libstdc++-v3 homepage.
|
||||||
|
@ -24,145 +24,147 @@
|
||||||
2. [15][removed]
|
2. [15][removed]
|
||||||
3. [16]What is this CVS thing that you keep mentioning?
|
3. [16]What is this CVS thing that you keep mentioning?
|
||||||
4. [17]How do I know if it works?
|
4. [17]How do I know if it works?
|
||||||
3. [18]Platform-Specific Issues
|
5. [18]This library is HUGE! And what's libsupc++?
|
||||||
1. [19]Can libstdc++-v3 be used with <my favorite compiler>?
|
3. [19]Platform-Specific Issues
|
||||||
2. [20][removed]
|
1. [20]Can libstdc++-v3 be used with <my favorite compiler>?
|
||||||
3. [21]Building under DEC OSF kills the assembler
|
2. [21][removed]
|
||||||
4. [22]Known Bugs and Non-Bugs
|
3. [22]Building under DEC OSF kills the assembler
|
||||||
1. [23]What works already?
|
4. [23]I can't use 'long long' on Solaris
|
||||||
2. [24]Bugs in gcc/g++ (not libstdc++-v3)
|
4. [24]Known Bugs and Non-Bugs
|
||||||
3. [25]Bugs in the C++ language/lib specification
|
1. [25]What works already?
|
||||||
4. [26]Things in libstdc++ that look like bugs
|
2. [26]Bugs in gcc/g++ (not libstdc++-v3)
|
||||||
o [27]reopening a stream fails
|
3. [27]Bugs in the C++ language/lib specification
|
||||||
o [28]-Weffc++ complains too much
|
4. [28]Things in libstdc++ that look like bugs
|
||||||
o [29]"ambiguous overloads" after including an old-style
|
o [29]reopening a stream fails
|
||||||
|
o [30]-Weffc++ complains too much
|
||||||
|
o [31]"ambiguous overloads" after including an old-style
|
||||||
header
|
header
|
||||||
o [30]The g++-3 headers are not ours
|
o [32]The g++-3 headers are not ours
|
||||||
o [31]compilation errors from streambuf.h
|
o [33]compilation errors from streambuf.h
|
||||||
o [32]errors about *Cconcept and constraints in the STL...
|
o [34]errors about *Cconcept and constraints in the STL...
|
||||||
5. [33]Aw, that's easy to fix!
|
5. [35]Aw, that's easy to fix!
|
||||||
5. [34]Miscellaneous
|
5. [36]Miscellaneous
|
||||||
1. [35]string::iterator is not char*; vector<T>::iterator is not
|
1. [37]string::iterator is not char*; vector<T>::iterator is not
|
||||||
T*
|
T*
|
||||||
2. [36]What's next after libstdc++-v3?
|
2. [38]What's next after libstdc++-v3?
|
||||||
3. [37]What about the STL from SGI?
|
3. [39]What about the STL from SGI?
|
||||||
4. [38]Extensions and Backward Compatibility
|
4. [40]Extensions and Backward Compatibility
|
||||||
5. [39][removed]
|
5. [41][removed]
|
||||||
6. [40]Is libstdc++-v3 thread-safe?
|
6. [42]Is libstdc++-v3 thread-safe?
|
||||||
7. [41]How do I get a copy of the ISO C++ Standard?
|
7. [43]How do I get a copy of the ISO C++ Standard?
|
||||||
_________________________________________________________________
|
_________________________________________________________________
|
||||||
|
|
||||||
1.0 General Information
|
1.0 General Information
|
||||||
|
|
||||||
1.1 What is libstdc++-v3?
|
1.1 What is libstdc++-v3?
|
||||||
|
|
||||||
The GNU Standard C++ Library v3, or libstdc++-2.9x, is an ongoing
|
The GNU Standard C++ Library v3, or libstdc++-2.9x, is an ongoing
|
||||||
project to implement the ISO 14882 Standard C++ library as described
|
project to implement the ISO 14882 Standard C++ library as described
|
||||||
in chapters 17 through 27 and annex D. As the library reaches stable
|
in chapters 17 through 27 and annex D. As the library reaches stable
|
||||||
plateaus, it is captured in a snapshot and released. The current
|
plateaus, it is captured in a snapshot and released. The current
|
||||||
release is [42]the eleventh snapshot. For those who want to see
|
release is [44]the eleventh snapshot. For those who want to see
|
||||||
exactly how far the project has come, or just want the latest
|
exactly how far the project has come, or just want the latest
|
||||||
bleeding-edge code, the up-to-date source is available over anonymous
|
bleeding-edge code, the up-to-date source is available over anonymous
|
||||||
CVS, and can even be browsed over the Web (see below).
|
CVS, and can even be browsed over the Web (see below).
|
||||||
|
|
||||||
A more formal description of the V3 goals can be found in the official
|
A more formal description of the V3 goals can be found in the official
|
||||||
[43]design document.
|
[45]design document.
|
||||||
_________________________________________________________________
|
_________________________________________________________________
|
||||||
|
|
||||||
1.2 Why should I use libstdc++?
|
1.2 Why should I use libstdc++?
|
||||||
|
|
||||||
The completion of the ISO C++ standardization gave the C++ community a
|
The completion of the ISO C++ standardization gave the C++ community a
|
||||||
powerful set of reuseable tools in the form of the C++ Standard
|
powerful set of reuseable tools in the form of the C++ Standard
|
||||||
Library. However, all existing C++ implementations are (as the Draft
|
Library. However, all existing C++ implementations are (as the Draft
|
||||||
Standard used to say) "incomplet and incorrekt," and many suffer from
|
Standard used to say) "incomplet and incorrekt," and many suffer from
|
||||||
limitations of the compilers that use them.
|
limitations of the compilers that use them.
|
||||||
|
|
||||||
The GNU C/C++/FORTRAN/<pick-a-language> compiler (gcc, g++, etc) is
|
The GNU C/C++/FORTRAN/<pick-a-language> compiler (gcc, g++, etc) is
|
||||||
widely considered to be one of the leading compilers in the world. Its
|
widely considered to be one of the leading compilers in the world. Its
|
||||||
development has recently been taken over by the [44]GCC team. All of
|
development has recently been taken over by the [46]GCC team. All of
|
||||||
the rapid development and near-legendary [45]portability that are the
|
the rapid development and near-legendary [47]portability that are the
|
||||||
hallmarks of an open-source project are being applied to libstdc++.
|
hallmarks of an open-source project are being applied to libstdc++.
|
||||||
|
|
||||||
That means that all of the Standard classes and functions (such as
|
That means that all of the Standard classes and functions (such as
|
||||||
string, vector<>, iostreams, and algorithms) will be freely available
|
string, vector<>, iostreams, and algorithms) will be freely available
|
||||||
and fully compliant. Programmers will no longer need to "roll their
|
and fully compliant. Programmers will no longer need to "roll their
|
||||||
own" nor be worried about platform-specific incompatabilities.
|
own" nor be worried about platform-specific incompatabilities.
|
||||||
_________________________________________________________________
|
_________________________________________________________________
|
||||||
|
|
||||||
1.3 Who's in charge of it?
|
1.3 Who's in charge of it?
|
||||||
|
|
||||||
The libstdc++ project is contributed to by several developers all over
|
The libstdc++ project is contributed to by several developers all over
|
||||||
the world, in the same way as GCC or Linux. Benjamin Kosnik, Gabriel
|
the world, in the same way as GCC or Linux. Benjamin Kosnik, Gabriel
|
||||||
Dos Reis, Phil Edwards, and Ulrich Drepper are the lead maintainers of
|
Dos Reis, Phil Edwards, and Ulrich Drepper are the lead maintainers of
|
||||||
the CVS archive.
|
the CVS archive.
|
||||||
|
|
||||||
Development and discussion is held on the libstdc++ mailing list.
|
Development and discussion is held on the libstdc++ mailing list.
|
||||||
Subscribing to the list, or searching the list archives, is open to
|
Subscribing to the list, or searching the list archives, is open to
|
||||||
everyone. You can read instructions for doing so on the [46]homepage.
|
everyone. You can read instructions for doing so on the [48]homepage.
|
||||||
If you have questions, ideas, code, or are just curious, sign up!
|
If you have questions, ideas, code, or are just curious, sign up!
|
||||||
_________________________________________________________________
|
_________________________________________________________________
|
||||||
|
|
||||||
1.4 How do I get libstdc++?
|
1.4 How do I get libstdc++?
|
||||||
|
|
||||||
The eleventh (and latest) snapshot of libstdc++-v3 is [47]available
|
The eleventh (and latest) snapshot of libstdc++-v3 is [49]available
|
||||||
via ftp. The filename is libstdc++-2.92.tar.gz.
|
via ftp. The filename is libstdc++-2.92.tar.gz.
|
||||||
|
|
||||||
The [48]homepage has instructions for retrieving the latest CVS
|
The [50]homepage has instructions for retrieving the latest CVS
|
||||||
sources, and for browsing the CVS sources over the web.
|
sources, and for browsing the CVS sources over the web.
|
||||||
|
|
||||||
The subset commonly known as the Standard Template Library (chapters
|
The subset commonly known as the Standard Template Library (chapters
|
||||||
23 through 25, mostly) is adapted from the final release of the SGI
|
23 through 25, mostly) is adapted from the final release of the SGI
|
||||||
STL.
|
STL.
|
||||||
_________________________________________________________________
|
_________________________________________________________________
|
||||||
|
|
||||||
1.5 When is libstdc++ going to be finished?
|
1.5 When is libstdc++ going to be finished?
|
||||||
|
|
||||||
Nathan Myers gave the best of all possible answers, responding to a
|
Nathan Myers gave the best of all possible answers, responding to a
|
||||||
Usenet article asking this question: Sooner, if you help.
|
Usenet article asking this question: Sooner, if you help.
|
||||||
_________________________________________________________________
|
_________________________________________________________________
|
||||||
|
|
||||||
1.6 How do I contribute to the effort?
|
1.6 How do I contribute to the effort?
|
||||||
|
|
||||||
Here is [49]a page devoted to this topic. Subscribing to the mailing
|
Here is [51]a page devoted to this topic. Subscribing to the mailing
|
||||||
list (see above, or the homepage) is a very good idea if you have
|
list (see above, or the homepage) is a very good idea if you have
|
||||||
something to contribute, or if you have spare time and want to help.
|
something to contribute, or if you have spare time and want to help.
|
||||||
Contributions don't have to be in the form of source code; anybody who
|
Contributions don't have to be in the form of source code; anybody who
|
||||||
is willing to help write documentation, for example, or has found a
|
is willing to help write documentation, for example, or has found a
|
||||||
bug in code that we all thought was working, is more than welcome!
|
bug in code that we all thought was working, is more than welcome!
|
||||||
_________________________________________________________________
|
_________________________________________________________________
|
||||||
|
|
||||||
1.7 What happened to libg++? I need that!
|
1.7 What happened to libg++? I need that!
|
||||||
|
|
||||||
The most recent libg++ README states that libg++ is no longer being
|
The most recent libg++ README states that libg++ is no longer being
|
||||||
actively maintained. It should not be used for new projects, and is
|
actively maintained. It should not be used for new projects, and is
|
||||||
only being kicked along to support older code.
|
only being kicked along to support older code.
|
||||||
|
|
||||||
The libg++ was designed and created when there was no Standard to
|
The libg++ was designed and created when there was no Standard to
|
||||||
provide guidance. Classes like linked lists are now provided for by
|
provide guidance. Classes like linked lists are now provided for by
|
||||||
list<T> and do not need to be created by genclass. (For that matter,
|
list<T> and do not need to be created by genclass. (For that matter,
|
||||||
templates exist now and are well-supported, whereas genclass (mostly)
|
templates exist now and are well-supported, whereas genclass (mostly)
|
||||||
predates them.)
|
predates them.)
|
||||||
|
|
||||||
There are other classes in libg++ that are not specified in the ISO
|
There are other classes in libg++ that are not specified in the ISO
|
||||||
Standard (e.g., statistical analysis). While there are a lot of really
|
Standard (e.g., statistical analysis). While there are a lot of really
|
||||||
useful things that are used by a lot of people (e.g., statistics :-),
|
useful things that are used by a lot of people (e.g., statistics :-),
|
||||||
the Standards Committee couldn't include everything, and so a lot of
|
the Standards Committee couldn't include everything, and so a lot of
|
||||||
those "obvious" classes didn't get included.
|
those "obvious" classes didn't get included.
|
||||||
|
|
||||||
Since libstdc++ is an implementation of the Standard Library, we have
|
Since libstdc++ is an implementation of the Standard Library, we have
|
||||||
no plans at this time to include non-Standard utilities in the
|
no plans at this time to include non-Standard utilities in the
|
||||||
implementation, however handy they are. (The extensions provided in
|
implementation, however handy they are. (The extensions provided in
|
||||||
the SGI STL aren't maintained by us and don't get a lot of our
|
the SGI STL aren't maintained by us and don't get a lot of our
|
||||||
attention, because they don't require a lot of our time.) It is
|
attention, because they don't require a lot of our time.) It is
|
||||||
entirely plausable that the "useful stuff" from libg++ might be
|
entirely plausable that the "useful stuff" from libg++ might be
|
||||||
extracted into an updated utilities library, but nobody has stated
|
extracted into an updated utilities library, but nobody has stated
|
||||||
such a project yet.
|
such a project yet.
|
||||||
|
|
||||||
(The [50]Boost site houses free C++ libraries that do varying things,
|
(The [52]Boost site houses free C++ libraries that do varying things,
|
||||||
and happened to be started by members of the Standards Committee.
|
and happened to be started by members of the Standards Committee.
|
||||||
Certain "useful stuff" classes will probably migrate there.)
|
Certain "useful stuff" classes will probably migrate there.)
|
||||||
|
|
||||||
For the bold and/or desperate, the [51]GCC FAQ describes where to find
|
For the bold and/or desperate, the [53]GCC FAQ describes where to find
|
||||||
the last libg++ source.
|
the last libg++ source.
|
||||||
_________________________________________________________________
|
_________________________________________________________________
|
||||||
|
|
||||||
|
@ -170,65 +172,65 @@
|
||||||
|
|
||||||
If you have read the README and RELEASE-NOTES files, and your question
|
If you have read the README and RELEASE-NOTES files, and your question
|
||||||
remains unanswered, then just ask the mailing list. At present, you do
|
remains unanswered, then just ask the mailing list. At present, you do
|
||||||
not need to be subscribed to the list to send a message to it. More
|
not need to be subscribed to the list to send a message to it. More
|
||||||
information is available on the homepage (including how to browse the
|
information is available on the homepage (including how to browse the
|
||||||
list archives); to send to the list, use [52]libstdc++@gcc.gnu.org.
|
list archives); to send to the list, use [54]libstdc++@gcc.gnu.org.
|
||||||
|
|
||||||
If you have a question that you think should be included here, or if
|
If you have a question that you think should be included here, or if
|
||||||
you have a question about a question/answer here, contact [53]Phil
|
you have a question about a question/answer here, contact [55]Phil
|
||||||
Edwards or [54]Gabriel Dos Reis.
|
Edwards or [56]Gabriel Dos Reis.
|
||||||
_________________________________________________________________
|
_________________________________________________________________
|
||||||
|
|
||||||
1.9 What are the license terms for libstdc++-v3?
|
1.9 What are the license terms for libstdc++-v3?
|
||||||
|
|
||||||
See [55]our license description for these and related questions.
|
See [57]our license description for these and related questions.
|
||||||
_________________________________________________________________
|
_________________________________________________________________
|
||||||
|
|
||||||
2.0 Installation
|
2.0 Installation
|
||||||
|
|
||||||
2.1 How do I install libstdc++-v3?
|
2.1 How do I install libstdc++-v3?
|
||||||
|
|
||||||
Complete instructions are not given here (this is a FAQ, not an
|
Complete instructions are not given here (this is a FAQ, not an
|
||||||
installation document), but the tools required are few:
|
installation document), but the tools required are few:
|
||||||
* A 3.x release of GCC. Note that building GCC is much easier and
|
* A 3.x release of GCC. Note that building GCC is much easier and
|
||||||
more automated than building the GCC 2.[78] series was. If you are
|
more automated than building the GCC 2.[78] series was. If you are
|
||||||
using GCC 2.95, you can still build earlier snapshots of
|
using GCC 2.95, you can still build earlier snapshots of
|
||||||
libstdc++.
|
libstdc++.
|
||||||
* GNU Make is recommended, but should not be required.
|
* GNU Make is recommended, but should not be required.
|
||||||
* The GNU Autotools are needed if you are messing with the configury
|
* The GNU Autotools are needed if you are messing with the configury
|
||||||
or makefiles.
|
or makefiles.
|
||||||
|
|
||||||
The file [56]documentation.html provides a good overview of the steps
|
The file [58]documentation.html provides a good overview of the steps
|
||||||
necessary to build, install, and use the library. Instructions for
|
necessary to build, install, and use the library. Instructions for
|
||||||
configuring the library with new flags such as --enable-threads are
|
configuring the library with new flags such as --enable-threads are
|
||||||
there also, as well as patches and instructions for working with GCC
|
there also, as well as patches and instructions for working with GCC
|
||||||
2.95.
|
2.95.
|
||||||
|
|
||||||
The top-level install.html and [57]RELEASE-NOTES files contain the
|
The top-level install.html and [59]RELEASE-NOTES files contain the
|
||||||
exact build and installation instructions. You may wish to browse
|
exact build and installation instructions. You may wish to browse
|
||||||
those files over CVSweb ahead of time to get a feel for what's
|
those files over CVSweb ahead of time to get a feel for what's
|
||||||
required. RELEASE-NOTES is located in the ".../docs/17_intro/"
|
required. RELEASE-NOTES is located in the ".../docs/17_intro/"
|
||||||
directory of the distribution.
|
directory of the distribution.
|
||||||
_________________________________________________________________
|
_________________________________________________________________
|
||||||
|
|
||||||
2.2 [removed]
|
2.2 [removed]
|
||||||
|
|
||||||
This question has become moot and has been removed. The stub is here
|
This question has become moot and has been removed. The stub is here
|
||||||
to preserve numbering (and hence links/bookmarks).
|
to preserve numbering (and hence links/bookmarks).
|
||||||
_________________________________________________________________
|
_________________________________________________________________
|
||||||
|
|
||||||
2.3 What is this CVS thing that you keep mentioning?
|
2.3 What is this CVS thing that you keep mentioning?
|
||||||
|
|
||||||
The Concurrent Versions System is one of several revision control
|
The Concurrent Versions System is one of several revision control
|
||||||
packages. It was selected for GNU projects because it's free (speech),
|
packages. It was selected for GNU projects because it's free (speech),
|
||||||
free (beer), and very high quality. The [58]CVS entry in the GNU
|
free (beer), and very high quality. The [60]CVS entry in the GNU
|
||||||
software catalogue has a better description as well as a [59]link to
|
software catalogue has a better description as well as a [61]link to
|
||||||
the makers of CVS.
|
the makers of CVS.
|
||||||
|
|
||||||
The "anonymous client checkout" feature of CVS is similar to anonymous
|
The "anonymous client checkout" feature of CVS is similar to anonymous
|
||||||
FTP in that it allows anyone to retrieve the latest libstdc++ sources.
|
FTP in that it allows anyone to retrieve the latest libstdc++ sources.
|
||||||
|
|
||||||
After the first of April, American users will have a "/pharmacy"
|
After the first of April, American users will have a "/pharmacy"
|
||||||
command-line option...
|
command-line option...
|
||||||
_________________________________________________________________
|
_________________________________________________________________
|
||||||
|
|
||||||
|
@ -237,14 +239,62 @@
|
||||||
libstdc++-v3 comes with its own testsuite. You do not need to actually
|
libstdc++-v3 comes with its own testsuite. You do not need to actually
|
||||||
install the library ("make install") to run the testsuite.
|
install the library ("make install") to run the testsuite.
|
||||||
|
|
||||||
To run the testsuite on the library after building it, use "make
|
To run the testsuite on the library after building it, use "make
|
||||||
check" while in your build directory. To run the testsuite on the
|
check" while in your build directory. To run the testsuite on the
|
||||||
library after building and installing it, use "make check-install"
|
library after building and installing it, use "make check-install"
|
||||||
instead.
|
instead.
|
||||||
|
|
||||||
If you find bugs in the testsuite programs themselves, or if you think
|
If you find bugs in the testsuite programs themselves, or if you think
|
||||||
of a new test program that should be added to the suite, please write
|
of a new test program that should be added to the suite, please write
|
||||||
up your idea and send it to the list!
|
up your idea and send it to the list!
|
||||||
|
_________________________________________________________________
|
||||||
|
|
||||||
|
2.4 This library is HUGE! And what's libsupc++?
|
||||||
|
|
||||||
|
Usually the size of libraries on disk isn't noticeable. When a link
|
||||||
|
editor (or simply "linker") pulls things from a static archive
|
||||||
|
library, only the necessary object files are copied into your
|
||||||
|
executable, not the entire library. Unfortunately, even if you only
|
||||||
|
need a single function or variable from an object file, the entire
|
||||||
|
object file is extracted. (There's nothing unique to C++ or
|
||||||
|
libstdc++-v3 about this; it's just common behavior, given here for
|
||||||
|
background reasons.)
|
||||||
|
|
||||||
|
Some of the object files which make up libstdc++.a are rather large.
|
||||||
|
If you create a statically-linked executable with -static, those large
|
||||||
|
object files are suddenly part of your executable. Historically the
|
||||||
|
best way around this was to only place a very few functions (often
|
||||||
|
only a single one) in each source/object file; then extracting a
|
||||||
|
single function is the same as extracting a single .o file. For
|
||||||
|
libstdc++-v3 this is only possible to a certain extent; the object
|
||||||
|
files in question contain template classes and template functions,
|
||||||
|
pre-instantiated, and splitting those up causes severe maintenance
|
||||||
|
headaches.
|
||||||
|
|
||||||
|
It's not a bug, and it's not really a problem. Nevertheless, some
|
||||||
|
people don't like it, so here are two pseudo-solutions:
|
||||||
|
|
||||||
|
If the only functions from libstdc++.a which you need are language
|
||||||
|
support functions (those listed in [62]clause 18 of the standard,
|
||||||
|
e.g., new and delete), then try linking against libsupc++.a (usually
|
||||||
|
specifying -lsupc++ when calling g++ for the final link step will do
|
||||||
|
it). This library contains only those support routines, one per object
|
||||||
|
file. But if you are using anything from the rest of the library, such
|
||||||
|
as IOStreams or vectors, then you'll still need pieces from
|
||||||
|
libstdc++.a.
|
||||||
|
|
||||||
|
The second method is one we hope to incorporate into the library build
|
||||||
|
process. Some platforms can place each function and variable into its
|
||||||
|
own section in a .o file. The GNU linker can then perform garbage
|
||||||
|
collection on unused sections; this reduces the situation to only
|
||||||
|
copying needed functions into the executable, as before, but all
|
||||||
|
happens automatically.
|
||||||
|
|
||||||
|
Unfortunately the garbage collection in GNU ld is buggy; sections
|
||||||
|
(corresponding to functions and variables) which are used are
|
||||||
|
mistakenly removed, leading to horrible crashes when your executable
|
||||||
|
starts up. For the time being, this feature is not used when building
|
||||||
|
the library.
|
||||||
_________________________________________________________________
|
_________________________________________________________________
|
||||||
|
|
||||||
3.0 Platform-Specific Issues
|
3.0 Platform-Specific Issues
|
||||||
|
@ -253,60 +303,71 @@
|
||||||
|
|
||||||
Probably not. Yet.
|
Probably not. Yet.
|
||||||
|
|
||||||
Because GCC advances so rapidly, development and testing of libstdc++
|
Because GCC advances so rapidly, development and testing of libstdc++
|
||||||
is being done almost entirely under that compiler. If you are curious
|
is being done almost entirely under that compiler. If you are curious
|
||||||
about whether other, lesser compilers (*grin*) support libstdc++, you
|
about whether other, lesser compilers (*grin*) support libstdc++, you
|
||||||
are more than welcome to try. Configuring and building the library
|
are more than welcome to try. Configuring and building the library
|
||||||
(see above) will still require certain tools, however. Also keep in
|
(see above) will still require certain tools, however. Also keep in
|
||||||
mind that building libstdc++ does not imply that your compiler will be
|
mind that building libstdc++ does not imply that your compiler will be
|
||||||
able to use all of the features found in the C++ Standard Library.
|
able to use all of the features found in the C++ Standard Library.
|
||||||
|
|
||||||
Since the goal of ISO Standardization is for all C++ implementations
|
Since the goal of ISO Standardization is for all C++ implementations
|
||||||
to be able to share code, the final libstdc++ should, in theory, be
|
to be able to share code, the final libstdc++ should, in theory, be
|
||||||
useable under any ISO-compliant compiler. It will still be targeted
|
useable under any ISO-compliant compiler. It will still be targeted
|
||||||
and optimized for GCC/g++, however.
|
and optimized for GCC/g++, however.
|
||||||
_________________________________________________________________
|
_________________________________________________________________
|
||||||
|
|
||||||
3.2 [removed]
|
3.2 [removed]
|
||||||
|
|
||||||
This question has become moot and has been removed. The stub is here
|
This question has become moot and has been removed. The stub is here
|
||||||
to preserve numbering (and hence links/bookmarks).
|
to preserve numbering (and hence links/bookmarks).
|
||||||
_________________________________________________________________
|
_________________________________________________________________
|
||||||
|
|
||||||
3.3 Building DEC OSF kills the assembler
|
3.3 Building DEC OSF kills the assembler
|
||||||
|
|
||||||
The atomicity.h header for the Alpha processor currently uses
|
The atomicity.h header for the Alpha processor currently uses
|
||||||
pseudo-operators which the DEC assembler doesn't understand (in
|
pseudo-operators which the DEC assembler doesn't understand (in
|
||||||
particular, .subsection and .previous). The simple solution is to
|
particular, .subsection and .previous). The simple solution is to
|
||||||
install GNU as and arrange for the GCC build to use it (or merge the
|
install GNU as and arrange for the GCC build to use it (or merge the
|
||||||
sources and build it during the bootstrap).
|
sources and build it during the bootstrap).
|
||||||
|
|
||||||
Anyone who [60]knows the DEC assembler well enough to provide the
|
Anyone who [63]knows the DEC assembler well enough to provide the
|
||||||
equivalent of these two pseudos would win praise and accolades from
|
equivalent of these two pseudos would win praise and accolades from
|
||||||
many.
|
many.
|
||||||
|
_________________________________________________________________
|
||||||
|
|
||||||
|
3.4 I can't use 'long long' on Solaris
|
||||||
|
|
||||||
|
By default we try to support the C99 long long type. This requires
|
||||||
|
that certain functions from your C library be present.
|
||||||
|
|
||||||
|
Up through release 3.0.2 the tests performed were too general, and
|
||||||
|
this feature was disabled when it did not need to be. The most
|
||||||
|
commonly reported platform affected was Solaris.
|
||||||
|
|
||||||
|
This has been fixed for 3.0.3 and onwards.
|
||||||
_________________________________________________________________
|
_________________________________________________________________
|
||||||
|
|
||||||
4.0 Known Bugs and Non-Bugs
|
4.0 Known Bugs and Non-Bugs
|
||||||
|
|
||||||
Note that this section can get rapdily outdated -- such is the nature
|
Note that this section can get rapdily outdated -- such is the nature
|
||||||
of an open-source project. For the latest information, join the
|
of an open-source project. For the latest information, join the
|
||||||
mailing list or look through recent archives. The RELEASE- NOTES and
|
mailing list or look through recent archives. The RELEASE- NOTES and
|
||||||
BUGS files are generally kept up-to-date.
|
BUGS files are generally kept up-to-date.
|
||||||
|
|
||||||
For 3.0.1, the most common "bug" is an apparently missing "../" in
|
For 3.0.1, the most common "bug" is an apparently missing "../" in
|
||||||
include/Makefile, resulting in files like gthr.h and gthr-single.h not
|
include/Makefile, resulting in files like gthr.h and gthr-single.h not
|
||||||
being found.
|
being found.
|
||||||
|
|
||||||
Please read [61]the configuration instructions for GCC, specifically
|
Please read [64]the configuration instructions for GCC, specifically
|
||||||
the part about configuring in a separate build directory, and how
|
the part about configuring in a separate build directory, and how
|
||||||
strongly recommended it is. Building in the source directory is
|
strongly recommended it is. Building in the source directory is
|
||||||
fragile, is rarely tested, and tends to break, as in this case. Work
|
fragile, is rarely tested, and tends to break, as in this case. This
|
||||||
has already gone into the source tree to make this less painful for
|
was fixed for 3.0.2.
|
||||||
the next release.
|
|
||||||
|
|
||||||
Please do not report this as a bug. We know about it. Reporting this
|
Please do not report these as bugs. We know about them. Reporting this
|
||||||
-- or any other problem that's already been fixed -- hinders the
|
-- or any other problem that's already been fixed -- hinders the
|
||||||
development of GCC, because we have to take time to respond to your
|
development of GCC, because we have to take time to respond to your
|
||||||
report. Thank you.
|
report. Thank you.
|
||||||
|
|
||||||
4.1 What works already?
|
4.1 What works already?
|
||||||
|
@ -340,8 +401,8 @@ New:
|
||||||
|
|
||||||
4.2 Bugs in gcc/g++ (not libstdc++-v3)
|
4.2 Bugs in gcc/g++ (not libstdc++-v3)
|
||||||
|
|
||||||
This is by no means meant to be complete nor exhaustive, but mentions
|
This is by no means meant to be complete nor exhaustive, but mentions
|
||||||
some problems that users may encounter when building or using
|
some problems that users may encounter when building or using
|
||||||
libstdc++. If you are experiencing one of these problems, you can find
|
libstdc++. If you are experiencing one of these problems, you can find
|
||||||
more information on the libstdc++ and the GCC mailing lists.
|
more information on the libstdc++ and the GCC mailing lists.
|
||||||
* As of 2.91, these bugs have all been fixed. We look forward to new
|
* As of 2.91, these bugs have all been fixed. We look forward to new
|
||||||
|
@ -350,34 +411,34 @@ New:
|
||||||
|
|
||||||
4.3 Bugs in the C++ language/lib specification
|
4.3 Bugs in the C++ language/lib specification
|
||||||
|
|
||||||
Yes, unfortunately, there are some. In a [62]message to the list,
|
Yes, unfortunately, there are some. In a [65]message to the list,
|
||||||
Nathan Myers announced that he has started a list of problems in the
|
Nathan Myers announced that he has started a list of problems in the
|
||||||
ISO C++ Standard itself, especially with regard to the chapters that
|
ISO C++ Standard itself, especially with regard to the chapters that
|
||||||
concern the library. The list itself is [63]posted on his website.
|
concern the library. The list itself is [66]posted on his website.
|
||||||
Developers who are having problems interpreting the Standard may wish
|
Developers who are having problems interpreting the Standard may wish
|
||||||
to consult his notes.
|
to consult his notes.
|
||||||
|
|
||||||
For those people who are not part of the ISO Library Group (i.e.,
|
For those people who are not part of the ISO Library Group (i.e.,
|
||||||
nearly all of us needing to read this page in the first place :-), a
|
nearly all of us needing to read this page in the first place :-), a
|
||||||
public list of the library defects is occasionally published [64]here.
|
public list of the library defects is occasionally published [67]here.
|
||||||
Some of these have resulted in [65]code changes.
|
Some of these have resulted in [68]code changes.
|
||||||
_________________________________________________________________
|
_________________________________________________________________
|
||||||
|
|
||||||
4.4 Things in libstdc++ that look like bugs
|
4.4 Things in libstdc++ that look like bugs
|
||||||
|
|
||||||
There are things which are not bugs in the compiler (4.2) nor the
|
There are things which are not bugs in the compiler (4.2) nor the
|
||||||
language specification (4.3), but aren't really bugs in libstdc++,
|
language specification (4.3), but aren't really bugs in libstdc++,
|
||||||
either. Really! Please do not report these as bugs.
|
either. Really! Please do not report these as bugs.
|
||||||
|
|
||||||
-Weffc++ The biggest of these is the quadzillions of warnings about
|
-Weffc++ The biggest of these is the quadzillions of warnings about
|
||||||
the library headers emitted when -Weffc++ is used. Making libstdc++
|
the library headers emitted when -Weffc++ is used. Making libstdc++
|
||||||
"-Weffc++-clean" is not a goal of the project, for a few reasons.
|
"-Weffc++-clean" is not a goal of the project, for a few reasons.
|
||||||
Mainly, that option tries to enforce object-oriented programming,
|
Mainly, that option tries to enforce object-oriented programming,
|
||||||
while the Standard Library isn't necessarily trying to be OO. There
|
while the Standard Library isn't necessarily trying to be OO. There
|
||||||
are multiple solutions under discussion.
|
are multiple solutions under discussion.
|
||||||
|
|
||||||
reopening a stream fails Did I just say that -Weffc++ was our biggest
|
reopening a stream fails Did I just say that -Weffc++ was our biggest
|
||||||
false-bug report? I lied. (It used to be.) Today it seems to be
|
false-bug report? I lied. (It used to be.) Today it seems to be
|
||||||
reports that after executing a sequence like
|
reports that after executing a sequence like
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
...
|
...
|
||||||
|
@ -388,40 +449,40 @@ New:
|
||||||
fs.close();
|
fs.close();
|
||||||
fs.open("a_new_file");
|
fs.open("a_new_file");
|
||||||
|
|
||||||
all operations on the re-opened fs will fail, or at least act very
|
all operations on the re-opened fs will fail, or at least act very
|
||||||
strangely. Yes, they often will, especially if fs reached the EOF
|
strangely. Yes, they often will, especially if fs reached the EOF
|
||||||
state on the previous file. The reason is that the state flags are not
|
state on the previous file. The reason is that the state flags are not
|
||||||
cleared on a successful call to open(). The standard unfortunately did
|
cleared on a successful call to open(). The standard unfortunately did
|
||||||
not specify behavior in this case, and to everybody's great sorrow,
|
not specify behavior in this case, and to everybody's great sorrow,
|
||||||
the [66]proposed LWG resolution (see DR #22) is to leave the flags
|
the [69]proposed LWG resolution (see DR #22) is to leave the flags
|
||||||
unchanged. You must insert a call to fs.clear() between the calls to
|
unchanged. You must insert a call to fs.clear() between the calls to
|
||||||
close() and open(), and then everything will work like we all expect
|
close() and open(), and then everything will work like we all expect
|
||||||
it to work.
|
it to work.
|
||||||
|
|
||||||
rel_ops Another is the rel_ops namespace and the template comparison
|
rel_ops Another is the rel_ops namespace and the template comparison
|
||||||
operator functions contained therein. If they become visible in the
|
operator functions contained therein. If they become visible in the
|
||||||
same namespace as other comparison functions (e.g., 'using' them and
|
same namespace as other comparison functions (e.g., 'using' them and
|
||||||
the <iterator> header), then you will suddenly be faced with huge
|
the <iterator> header), then you will suddenly be faced with huge
|
||||||
numbers of ambiguity errors. This was discussed on the -v3 list;
|
numbers of ambiguity errors. This was discussed on the -v3 list;
|
||||||
Nathan Myers [67]sums things up here.
|
Nathan Myers [70]sums things up here.
|
||||||
|
|
||||||
The g++-3 headers are not ours
|
The g++-3 headers are not ours
|
||||||
|
|
||||||
If you have found an extremely broken header file which is causing
|
If you have found an extremely broken header file which is causing
|
||||||
problems for you, look carefully before submitting a "high" priority
|
problems for you, look carefully before submitting a "high" priority
|
||||||
bug report (which you probably shouldn't do anyhow; see the last
|
bug report (which you probably shouldn't do anyhow; see the last
|
||||||
paragraph of the page describing [68]the GCC bug database).
|
paragraph of the page describing [71]the GCC bug database).
|
||||||
|
|
||||||
If the headers are in ${prefix}/include/g++-3, then you are using the
|
If the headers are in ${prefix}/include/g++-3, then you are using the
|
||||||
old libstdc++-v2 library, which is nonstandard and unmaintained. Do
|
old libstdc++-v2 library, which is nonstandard and unmaintained. Do
|
||||||
not report problems with -v2 to the -v3 mailing list.
|
not report problems with -v2 to the -v3 mailing list.
|
||||||
|
|
||||||
Currently our header files are installed in ${prefix}/include/g++-v3
|
Currently our header files are installed in ${prefix}/include/g++-v3
|
||||||
(see the 'v'?). This may change with the next release of GCC, as it
|
(see the 'v'?). This may change with the next release of GCC, as it
|
||||||
may be too confusing, but [69]the question has not yet been decided.
|
may be too confusing, but [72]the question has not yet been decided.
|
||||||
|
|
||||||
glibc If you're on a GNU/Linux system and have just upgraded to glibc
|
glibc If you're on a GNU/Linux system and have just upgraded to glibc
|
||||||
2.2, but are still using gcc 2.95.2, then you should have read the
|
2.2, but are still using gcc 2.95.2, then you should have read the
|
||||||
glibc FAQ, specifically 2.34:
|
glibc FAQ, specifically 2.34:
|
||||||
2.34. When compiling C++ programs, I get a compilation error in streambuf.h.
|
2.34. When compiling C++ programs, I get a compilation error in streambuf.h.
|
||||||
|
|
||||||
|
@ -431,36 +492,36 @@ type has changed in glibc 2.2. The patch is at
|
||||||
http://clisp.cons.org/~haible/gccinclude-glibc-2.2-compat.diff
|
http://clisp.cons.org/~haible/gccinclude-glibc-2.2-compat.diff
|
||||||
|
|
||||||
|
|
||||||
Note that 2.95.x shipped with the [70]old v2 library which is no
|
Note that 2.95.x shipped with the [73]old v2 library which is no
|
||||||
longer maintained. Also note that gcc 2.95.3 fixes this problem, but
|
longer maintained. Also note that gcc 2.95.3 fixes this problem, but
|
||||||
requires a separate patch for libstdc++-v3.
|
requires a separate patch for libstdc++-v3.
|
||||||
|
|
||||||
concept checks If you see compilation errors containing messages about
|
concept checks If you see compilation errors containing messages about
|
||||||
fooConcept and a constraints member function, then most likely you
|
fooConcept and a constraints member function, then most likely you
|
||||||
have violated one of the requirements for types used during
|
have violated one of the requirements for types used during
|
||||||
instantiation of template containers and functions. For example,
|
instantiation of template containers and functions. For example,
|
||||||
EqualityComparableConcept appears if your types must be comparable
|
EqualityComparableConcept appears if your types must be comparable
|
||||||
with == and you have not provided this capability (a typo, or wrong
|
with == and you have not provided this capability (a typo, or wrong
|
||||||
visibility, or you just plain forgot, etc).
|
visibility, or you just plain forgot, etc).
|
||||||
|
|
||||||
More information, including how to optionally enable/disable the
|
More information, including how to optionally enable/disable the
|
||||||
checks, is available [71]here.
|
checks, is available [74]here.
|
||||||
_________________________________________________________________
|
_________________________________________________________________
|
||||||
|
|
||||||
4.5 Aw, that's easy to fix!
|
4.5 Aw, that's easy to fix!
|
||||||
|
|
||||||
If you have found a bug in the library and you think you have a
|
If you have found a bug in the library and you think you have a
|
||||||
working fix, then send it in! The main GCC site has a page on
|
working fix, then send it in! The main GCC site has a page on
|
||||||
[72]submitting patches that covers the procedure, but for libstdc++
|
[75]submitting patches that covers the procedure, but for libstdc++
|
||||||
you should also send the patch to our mailing list in addition to the
|
you should also send the patch to our mailing list in addition to the
|
||||||
GCC patches mailing list. The libstdc++ [73]contributors' page also
|
GCC patches mailing list. The libstdc++ [76]contributors' page also
|
||||||
talks about how to submit patches.
|
talks about how to submit patches.
|
||||||
|
|
||||||
In addition to the description, the patch, and the ChangeLog entry, it
|
In addition to the description, the patch, and the ChangeLog entry, it
|
||||||
is a Good Thing if you can additionally create a small test program to
|
is a Good Thing if you can additionally create a small test program to
|
||||||
test for the presence of the bug that your patch fixes. Bugs have a
|
test for the presence of the bug that your patch fixes. Bugs have a
|
||||||
way of being reintroduced; if an old bug creeps back in, it will be
|
way of being reintroduced; if an old bug creeps back in, it will be
|
||||||
caught immediately by the [74]testsuite -- but only if such a test
|
caught immediately by the [77]testsuite -- but only if such a test
|
||||||
exists.
|
exists.
|
||||||
_________________________________________________________________
|
_________________________________________________________________
|
||||||
|
|
||||||
|
@ -468,61 +529,61 @@ http://clisp.cons.org/~haible/gccinclude-glibc-2.2-compat.diff
|
||||||
|
|
||||||
5.1 string::iterator is not char*; vector<T>::iterator is not T*
|
5.1 string::iterator is not char*; vector<T>::iterator is not T*
|
||||||
|
|
||||||
If you have code that depends on container<T> iterators being
|
If you have code that depends on container<T> iterators being
|
||||||
implemented as pointer-to-T, your code is broken.
|
implemented as pointer-to-T, your code is broken.
|
||||||
|
|
||||||
While there are arguments for iterators to be implemented in that
|
While there are arguments for iterators to be implemented in that
|
||||||
manner, A) they aren't very good ones in the long term, and B) they
|
manner, A) they aren't very good ones in the long term, and B) they
|
||||||
were never guaranteed by the Standard anyway. The type-safety achieved
|
were never guaranteed by the Standard anyway. The type-safety achieved
|
||||||
by making iterators a real class rather than a typedef for T*
|
by making iterators a real class rather than a typedef for T*
|
||||||
outweighs nearly all opposing arguments.
|
outweighs nearly all opposing arguments.
|
||||||
|
|
||||||
Code which does assume that a vector iterator i is a pointer can often
|
Code which does assume that a vector iterator i is a pointer can often
|
||||||
be fixed by changing i in certain expressions to &*i . Future
|
be fixed by changing i in certain expressions to &*i . Future
|
||||||
revisions of the Standard are expected to bless this usage for
|
revisions of the Standard are expected to bless this usage for
|
||||||
vector<> (but not for basic_string<>).
|
vector<> (but not for basic_string<>).
|
||||||
_________________________________________________________________
|
_________________________________________________________________
|
||||||
|
|
||||||
5.2 What's next after libstdc++-v3?
|
5.2 What's next after libstdc++-v3?
|
||||||
|
|
||||||
Hopefully, not much. The goal of libstdc++-v3 is to produce a
|
Hopefully, not much. The goal of libstdc++-v3 is to produce a
|
||||||
fully-compliant, fully-portable Standard Library. After that, we're
|
fully-compliant, fully-portable Standard Library. After that, we're
|
||||||
mostly done: there won't be any more compliance work to do. However:
|
mostly done: there won't be any more compliance work to do. However:
|
||||||
1. The ISO Committee will meet periodically to review Defect Reports
|
1. The ISO Committee will meet periodically to review Defect Reports
|
||||||
in the C++ Standard. Undoubtedly some of these will result in
|
in the C++ Standard. Undoubtedly some of these will result in
|
||||||
changes to the Standard, which will be reflected in patches to
|
changes to the Standard, which will be reflected in patches to
|
||||||
libstdc++. Some of that is already happening, see 4.2. Some of
|
libstdc++. Some of that is already happening, see 4.2. Some of
|
||||||
those changes are being predicted by the library maintainers, and
|
those changes are being predicted by the library maintainers, and
|
||||||
we add code to the library based on what the current proposed
|
we add code to the library based on what the current proposed
|
||||||
resolution specifies. Those additions are listed in [75]the
|
resolution specifies. Those additions are listed in [78]the
|
||||||
extensions page.
|
extensions page.
|
||||||
2. Performance tuning. Lots of performance tuning. This too is
|
2. Performance tuning. Lots of performance tuning. This too is
|
||||||
already underway for post-3.0 releases, starting with memory
|
already underway for post-3.0 releases, starting with memory
|
||||||
expansion in container classes and buffer usage in synchronized
|
expansion in container classes and buffer usage in synchronized
|
||||||
stream objects.
|
stream objects.
|
||||||
3. An ABI for libstdc++ will eventually be developed, so that
|
3. An ABI for libstdc++ will eventually be developed, so that
|
||||||
multiple binary-incompatible copies of the library can be replaced
|
multiple binary-incompatible copies of the library can be replaced
|
||||||
with a single backwards-compatible library, like libgcc_s.so is.
|
with a single backwards-compatible library, like libgcc_s.so is.
|
||||||
4. The current libstdc++ contains extensions to the Library which
|
4. The current libstdc++ contains extensions to the Library which
|
||||||
must be explicitly requested by client code (for example, the hash
|
must be explicitly requested by client code (for example, the hash
|
||||||
tables from SGI). Other extensions may be added to libstdc++-v3 if
|
tables from SGI). Other extensions may be added to libstdc++-v3 if
|
||||||
they seem to be "standard" enough. (For example, the "long long"
|
they seem to be "standard" enough. (For example, the "long long"
|
||||||
type from C99.) Bugfixes and rewrites (to improve or fix thread
|
type from C99.) Bugfixes and rewrites (to improve or fix thread
|
||||||
safety, for instance) will of course be a continuing task.
|
safety, for instance) will of course be a continuing task.
|
||||||
|
|
||||||
[76]This question about the next libstdc++ prompted some brief but
|
[79]This question about the next libstdc++ prompted some brief but
|
||||||
interesting [77]speculation.
|
interesting [80]speculation.
|
||||||
_________________________________________________________________
|
_________________________________________________________________
|
||||||
|
|
||||||
5.3 What about the STL from SGI?
|
5.3 What about the STL from SGI?
|
||||||
|
|
||||||
The [78]STL from SGI, version 3.3, was the most recent merge of the
|
The [81]STL from SGI, version 3.3, was the most recent merge of the
|
||||||
STL codebase. The code in libstdc++ contains many fixes and changes,
|
STL codebase. The code in libstdc++ contains many fixes and changes,
|
||||||
and it is very likely that the SGI code is no longer under active
|
and it is very likely that the SGI code is no longer under active
|
||||||
development. We expect that no future merges will take place.
|
development. We expect that no future merges will take place.
|
||||||
|
|
||||||
In particular, string is not from SGI and makes no use of their "rope"
|
In particular, string is not from SGI and makes no use of their "rope"
|
||||||
class (which is included as an optional extension), nor is valarray
|
class (which is included as an optional extension), nor is valarray
|
||||||
and some others. Classes like vector<> are, however.
|
and some others. Classes like vector<> are, however.
|
||||||
|
|
||||||
The FAQ for SGI's STL (one jump off of their main page) is recommended
|
The FAQ for SGI's STL (one jump off of their main page) is recommended
|
||||||
|
@ -531,31 +592,31 @@ http://clisp.cons.org/~haible/gccinclude-glibc-2.2-compat.diff
|
||||||
|
|
||||||
5.4 Extensions and Backward Compatibility
|
5.4 Extensions and Backward Compatibility
|
||||||
|
|
||||||
Although you can specify -I options to make the preprocessor search
|
Although you can specify -I options to make the preprocessor search
|
||||||
the g++-v3/ext and /backward directories, it is better to refer to
|
the g++-v3/ext and /backward directories, it is better to refer to
|
||||||
files there by their path, as in:
|
files there by their path, as in:
|
||||||
#include <ext/hash_map>
|
#include <ext/hash_map>
|
||||||
|
|
||||||
|
|
||||||
Extensions to the library have [79]their own page.
|
Extensions to the library have [82]their own page.
|
||||||
_________________________________________________________________
|
_________________________________________________________________
|
||||||
|
|
||||||
5.5 [removed]
|
5.5 [removed]
|
||||||
|
|
||||||
This question has become moot and has been removed. The stub is here
|
This question has become moot and has been removed. The stub is here
|
||||||
to preserve numbering (and hence links/bookmarks).
|
to preserve numbering (and hence links/bookmarks).
|
||||||
_________________________________________________________________
|
_________________________________________________________________
|
||||||
|
|
||||||
5.6 Is libstdc++-v3 thread-safe?
|
5.6 Is libstdc++-v3 thread-safe?
|
||||||
|
|
||||||
When the system's libc is itself thread-safe, a non-generic
|
When the system's libc is itself thread-safe, a non-generic
|
||||||
implementation of atomicity.h exists for the architecture, and gcc
|
implementation of atomicity.h exists for the architecture, and gcc
|
||||||
itself reports a thread model other than single; libstdc++-v3 strives
|
itself reports a thread model other than single; libstdc++-v3 strives
|
||||||
to be thread-safe. The user-code must guard against concurrent method
|
to be thread-safe. The user-code must guard against concurrent method
|
||||||
calls which may access any particular library object's state.
|
calls which may access any particular library object's state.
|
||||||
Typically, the application programmer may infer what object locks must
|
Typically, the application programmer may infer what object locks must
|
||||||
be held based on the objects referenced in a method call. Without
|
be held based on the objects referenced in a method call. Without
|
||||||
getting into great detail, here is an example which requires
|
getting into great detail, here is an example which requires
|
||||||
user-level locks:
|
user-level locks:
|
||||||
library_class_a shared_object_a;
|
library_class_a shared_object_a;
|
||||||
|
|
||||||
|
@ -569,8 +630,8 @@ a
|
||||||
|
|
||||||
// Multiple copies of thread_main() are started in independent threads.
|
// Multiple copies of thread_main() are started in independent threads.
|
||||||
|
|
||||||
Under the assumption that object_a and object_b are never exposed to
|
Under the assumption that object_a and object_b are never exposed to
|
||||||
another thread, here is an example that should not require any
|
another thread, here is an example that should not require any
|
||||||
user-level locks:
|
user-level locks:
|
||||||
thread_main () {
|
thread_main () {
|
||||||
library_class_a object_a;
|
library_class_a object_a;
|
||||||
|
@ -581,32 +642,32 @@ a
|
||||||
|
|
||||||
All library objects are safe to use in a multithreaded program as long
|
All library objects are safe to use in a multithreaded program as long
|
||||||
as each thread carefully locks out access by any other thread while it
|
as each thread carefully locks out access by any other thread while it
|
||||||
uses any object visible to another thread. This requirement includes
|
uses any object visible to another thread. This requirement includes
|
||||||
both read and write access to objects; do not assume that two threads
|
both read and write access to objects; do not assume that two threads
|
||||||
may read a shared standard container at the same time.
|
may read a shared standard container at the same time.
|
||||||
|
|
||||||
See chapters [80]17 (library introduction), [81]23 (containers), and
|
See chapters [83]17 (library introduction), [84]23 (containers), and
|
||||||
[82]27 (I/O) for more information.
|
[85]27 (I/O) for more information.
|
||||||
_________________________________________________________________
|
_________________________________________________________________
|
||||||
|
|
||||||
5.7 How do I get a copy of the ISO C++ Standard?
|
5.7 How do I get a copy of the ISO C++ Standard?
|
||||||
|
|
||||||
Copies of the full ISO 14882 standard are available on line via the
|
Copies of the full ISO 14882 standard are available on line via the
|
||||||
ISO mirror site for committee members. Non-members, or those who have
|
ISO mirror site for committee members. Non-members, or those who have
|
||||||
not paid for the privilege of sitting on the committee and sustained
|
not paid for the privilege of sitting on the committee and sustained
|
||||||
their two-meeting commitment for voting rights, may get a copy of the
|
their two-meeting commitment for voting rights, may get a copy of the
|
||||||
standard from their respective national standards organization. In the
|
standard from their respective national standards organization. In the
|
||||||
USA, this national standards organization is ANSI and their website is
|
USA, this national standards organization is ANSI and their website is
|
||||||
right [83]here. (And if you've already registered with them, clicking
|
right [86]here. (And if you've already registered with them, clicking
|
||||||
this link will take you to directly to the place where you can [84]buy
|
this link will take you to directly to the place where you can [87]buy
|
||||||
the standard on-line.
|
the standard on-line.
|
||||||
|
|
||||||
Who is your country's member body? Visit the [85]ISO homepage and find
|
Who is your country's member body? Visit the [88]ISO homepage and find
|
||||||
out!
|
out!
|
||||||
_________________________________________________________________
|
_________________________________________________________________
|
||||||
|
|
||||||
See [86]license.html for copying conditions. Comments and suggestions
|
See [89]license.html for copying conditions. Comments and suggestions
|
||||||
are welcome, and may be sent to [87]the libstdc++ mailing list.
|
are welcome, and may be sent to [90]the libstdc++ mailing list.
|
||||||
|
|
||||||
References
|
References
|
||||||
|
|
||||||
|
@ -627,73 +688,76 @@ References
|
||||||
15. ../faq/index.html#2_2
|
15. ../faq/index.html#2_2
|
||||||
16. ../faq/index.html#2_3
|
16. ../faq/index.html#2_3
|
||||||
17. ../faq/index.html#2_4
|
17. ../faq/index.html#2_4
|
||||||
18. ../faq/index.html#3_0
|
18. ../faq/index.html#2_5
|
||||||
19. ../faq/index.html#3_1
|
19. ../faq/index.html#3_0
|
||||||
20. ../faq/index.html#3_2
|
20. ../faq/index.html#3_1
|
||||||
21. ../faq/index.html#3_3
|
21. ../faq/index.html#3_2
|
||||||
22. ../faq/index.html#4_0
|
22. ../faq/index.html#3_3
|
||||||
23. ../faq/index.html#4_1
|
23. ../faq/index.html#3_4
|
||||||
24. ../faq/index.html#4_2
|
24. ../faq/index.html#4_0
|
||||||
25. ../faq/index.html#4_3
|
25. ../faq/index.html#4_1
|
||||||
26. ../faq/index.html#4_4
|
26. ../faq/index.html#4_2
|
||||||
27. ../faq/index.html#4_4_iostreamclear
|
27. ../faq/index.html#4_3
|
||||||
28. ../faq/index.html#4_4_Weff
|
28. ../faq/index.html#4_4
|
||||||
29. ../faq/index.html#4_4_rel_ops
|
29. ../faq/index.html#4_4_iostreamclear
|
||||||
30. ../faq/index.html#4_4_interface
|
30. ../faq/index.html#4_4_Weff
|
||||||
31. ../faq/index.html#4_4_glibc
|
31. ../faq/index.html#4_4_rel_ops
|
||||||
32. ../faq/index.html#4_4_checks
|
32. ../faq/index.html#4_4_interface
|
||||||
33. ../faq/index.html#4_5
|
33. ../faq/index.html#4_4_glibc
|
||||||
34. ../faq/index.html#5_0
|
34. ../faq/index.html#4_4_checks
|
||||||
35. ../faq/index.html#5_1
|
35. ../faq/index.html#4_5
|
||||||
36. ../faq/index.html#5_2
|
36. ../faq/index.html#5_0
|
||||||
37. ../faq/index.html#5_3
|
37. ../faq/index.html#5_1
|
||||||
38. ../faq/index.html#5_4
|
38. ../faq/index.html#5_2
|
||||||
39. ../faq/index.html#5_5
|
39. ../faq/index.html#5_3
|
||||||
40. ../faq/index.html#5_6
|
40. ../faq/index.html#5_4
|
||||||
41. ../faq/index.html#5_7
|
41. ../faq/index.html#5_5
|
||||||
42. http://gcc.gnu.org/libstdc++/download.html
|
42. ../faq/index.html#5_6
|
||||||
43. ../17_intro/DESIGN
|
43. ../faq/index.html#5_7
|
||||||
44. http://gcc.gnu.org/
|
44. http://gcc.gnu.org/libstdc++/download.html
|
||||||
45. http://gcc.gnu.org/gcc-2.95/buildstat.html
|
45. ../17_intro/DESIGN
|
||||||
46. http://gcc.gnu.org/libstdc++/
|
46. http://gcc.gnu.org/
|
||||||
47. http://gcc.gnu.org/libstdc++/download.html
|
47. http://gcc.gnu.org/gcc-2.95/buildstat.html
|
||||||
48. http://gcc.gnu.org/libstdc++/
|
48. http://gcc.gnu.org/libstdc++/
|
||||||
49. ../17_intro/contribute.html
|
49. http://gcc.gnu.org/libstdc++/download.html
|
||||||
50. http://www.boost.org/
|
50. http://gcc.gnu.org/libstdc++/
|
||||||
51. http://gcc.gnu.org/fom_serv/cache/33.html
|
51. ../17_intro/contribute.html
|
||||||
52. mailto:libstdc++@gcc.gnu.org
|
52. http://www.boost.org/
|
||||||
53. mailto:pme@gcc.gnu.org
|
53. http://gcc.gnu.org/fom_serv/cache/33.html
|
||||||
54. mailto:gdr@gcc.gnu.org
|
54. mailto:libstdc++@gcc.gnu.org
|
||||||
55. ../17_intro/license.html
|
55. mailto:pme@gcc.gnu.org
|
||||||
56. ../documentation.html
|
56. mailto:gdr@gcc.gnu.org
|
||||||
57. ../17_intro/RELEASE-NOTES
|
57. ../17_intro/license.html
|
||||||
58. http://www.gnu.org/software/cvs/cvs.html
|
58. ../documentation.html
|
||||||
59. http://www.cvshome.org/
|
59. ../17_intro/RELEASE-NOTES
|
||||||
60. http://gcc.gnu.org/ml/libstdc++/2000-12/msg00279.html
|
60. http://www.gnu.org/software/cvs/cvs.html
|
||||||
61. http://gcc.gnu.org/install/configure.html
|
61. http://www.cvshome.org/
|
||||||
62. http://gcc.gnu.org/ml/libstdc++/1998/msg00006.html
|
62. ../18_support/howto.html
|
||||||
63. http://www.cantrip.org/draft-bugs.txt
|
63. http://gcc.gnu.org/ml/libstdc++/2000-12/msg00279.html
|
||||||
64. http://anubis.dkuug.dk/jtc1/sc22/wg21/
|
64. http://gcc.gnu.org/install/configure.html
|
||||||
65. ../faq/index.html#5_2
|
65. http://gcc.gnu.org/ml/libstdc++/1998/msg00006.html
|
||||||
66. ../ext/howto.html#5
|
66. http://www.cantrip.org/draft-bugs.txt
|
||||||
67. http://gcc.gnu.org/ml/libstdc++/2001-01/msg00247.html
|
67. http://anubis.dkuug.dk/jtc1/sc22/wg21/
|
||||||
68. http://gcc.gnu.org/gnatswrite.html
|
68. ../faq/index.html#5_2
|
||||||
69. http://gcc.gnu.org/ml/gcc/2000-10/msg00732.html
|
69. ../ext/howto.html#5
|
||||||
70. ../faq/index.html#4_4_interface
|
70. http://gcc.gnu.org/ml/libstdc++/2001-01/msg00247.html
|
||||||
71. ../19_diagnostics/howto.html#3
|
71. http://gcc.gnu.org/gnatswrite.html
|
||||||
72. http://gcc.gnu.org/contribute.html
|
72. http://gcc.gnu.org/ml/gcc/2000-10/msg00732.html
|
||||||
73. ../17_intro/contribute.html
|
73. ../faq/index.html#4_4_interface
|
||||||
74. ../faq/index.html#2_4
|
74. ../19_diagnostics/howto.html#3
|
||||||
75. ../ext/howto.html#5
|
75. http://gcc.gnu.org/contribute.html
|
||||||
76. http://gcc.gnu.org/ml/libstdc++/1999/msg00080.html
|
76. ../17_intro/contribute.html
|
||||||
77. http://gcc.gnu.org/ml/libstdc++/1999/msg00084.html
|
77. ../faq/index.html#2_4
|
||||||
78. http://www.sgi.com/Technology/STL/
|
78. ../ext/howto.html#5
|
||||||
79. ../ext/howto.html
|
79. http://gcc.gnu.org/ml/libstdc++/1999/msg00080.html
|
||||||
80. ../17_intro/howto.html#3
|
80. http://gcc.gnu.org/ml/libstdc++/1999/msg00084.html
|
||||||
81. ../23_containers/howto.html#3
|
81. http://www.sgi.com/Technology/STL/
|
||||||
82. ../27_io/howto.html#9
|
82. ../ext/howto.html
|
||||||
83. http://www.ansi.org/
|
83. ../17_intro/howto.html#3
|
||||||
84. http://webstore.ansi.org/ansidocstore/product.asp?sku=ISO%2FIEC+14882%2D1998
|
84. ../23_containers/howto.html#3
|
||||||
85. http://www.iso.ch/
|
85. ../27_io/howto.html#9
|
||||||
86. ../17_intro/license.html
|
86. http://www.ansi.org/
|
||||||
87. mailto:libstdc++@gcc.gnu.org
|
87. http://webstore.ansi.org/ansidocstore/product.asp?sku=ISO%2FIEC+14882%2D1998
|
||||||
|
88. http://www.iso.ch/
|
||||||
|
89. ../17_intro/license.html
|
||||||
|
90. mailto:libstdc++@gcc.gnu.org
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue