| 1 | <?xml version="1.0" encoding="ISO-8859-1"?>
|
|---|
| 2 | <!DOCTYPE html
|
|---|
| 3 | PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
|---|
| 4 | "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|---|
| 5 |
|
|---|
| 6 | <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
|---|
| 7 | <head>
|
|---|
| 8 | <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
|---|
| 9 | <meta name="KEYWORDS" content="libstdc++, libstdc++-v3, GCC, g++, libg++, STL" />
|
|---|
| 10 | <meta name="DESCRIPTION" content="FAQ for the GNU libstdc++ effort." />
|
|---|
| 11 | <title>libstdc++-v3 FAQ</title>
|
|---|
| 12 | <link rel="StyleSheet" href="../lib3styles.css" />
|
|---|
| 13 | <!--
|
|---|
| 14 | ** Locations of "the most recent snapshot is the Nth" text are
|
|---|
| 15 | ** answers 1_1, .
|
|---|
| 16 | -->
|
|---|
| 17 | </head>
|
|---|
| 18 | <body>
|
|---|
| 19 |
|
|---|
| 20 | <h1 class="centered">libstdc++ Frequently Asked Questions</h1>
|
|---|
| 21 |
|
|---|
| 22 | <p class="fineprint"><em>
|
|---|
| 23 | The latest version of this document is always available at
|
|---|
| 24 | <a href="http://gcc.gnu.org/onlinedocs/libstdc++/faq/">
|
|---|
| 25 | http://gcc.gnu.org/onlinedocs/libstdc++/faq/</a>. The main documentation
|
|---|
| 26 | page is at
|
|---|
| 27 | <a href="http://gcc.gnu.org/onlinedocs/libstdc++/documentation.html">
|
|---|
| 28 | http://gcc.gnu.org/onlinedocs/libstdc++/documentation.html</a>.
|
|---|
| 29 | </em></p>
|
|---|
| 30 |
|
|---|
| 31 | <p><em>
|
|---|
| 32 | To the <a href="http://gcc.gnu.org/libstdc++/">libstdc++-v3 homepage</a>.
|
|---|
| 33 | </em></p>
|
|---|
| 34 |
|
|---|
| 35 | <!-- ####################################################### -->
|
|---|
| 36 | <hr />
|
|---|
| 37 | <h1>Questions</h1>
|
|---|
| 38 | <ol>
|
|---|
| 39 | <li><a href="#1_0">General Information</a>
|
|---|
| 40 | <!-- I suspect these will mostly be links to/into existing documents. -->
|
|---|
| 41 | <ol>
|
|---|
| 42 | <li><a href="#1_1">What is libstdc++-v3?</a> </li>
|
|---|
| 43 | <li><a href="#1_2">Why should I use libstdc++?</a> </li>
|
|---|
| 44 | <li><a href="#1_3">Who's in charge of it?</a> </li>
|
|---|
| 45 | <li><a href="#1_4">How do I get libstdc++?</a> </li>
|
|---|
| 46 | <li><a href="#1_5">When is libstdc++ going to be finished?</a> </li>
|
|---|
| 47 | <li><a href="#1_6">How do I contribute to the effort?</a> </li>
|
|---|
| 48 | <li><a href="#1_7">What happened to libg++? I need that!</a> </li>
|
|---|
| 49 | <li><a href="#1_8">What if I have more questions?</a> </li>
|
|---|
| 50 | <li><a href="#1_9">What are the license terms for libstdc++-v3?</a> </li>
|
|---|
| 51 | </ol>
|
|---|
| 52 | </li>
|
|---|
| 53 |
|
|---|
| 54 | <li><a href="#2_0">Installation</a>
|
|---|
| 55 | <ol>
|
|---|
| 56 | <li><a href="#2_1">How do I install libstdc++-v3?</a> </li>
|
|---|
| 57 | <li><a href="#2_2">[removed]</a> </li>
|
|---|
| 58 | <li><a href="#2_3">What is this CVS thing that you keep
|
|---|
| 59 | mentioning?</a> </li>
|
|---|
| 60 | <li><a href="#2_4">How do I know if it works?</a> </li>
|
|---|
| 61 | <li><a href="#2_5">This library is HUGE! And what's libsupc++?</a> </li>
|
|---|
| 62 | </ol>
|
|---|
| 63 | </li>
|
|---|
| 64 |
|
|---|
| 65 | <li><a href="#3_0">Platform-Specific Issues</a>
|
|---|
| 66 | <ol>
|
|---|
| 67 | <li><a href="#3_1">Can libstdc++-v3 be used with <my
|
|---|
| 68 | favorite compiler>?</a> </li>
|
|---|
| 69 | <li><a href="#3_2">[removed]</a> </li>
|
|---|
| 70 | <li><a href="#3_3">[removed]</a> </li>
|
|---|
| 71 | <li><a href="#3_4">I can't use 'long long' on Solaris</a> </li>
|
|---|
| 72 | <li><a href="#3_5"><code>_XOPEN_SOURCE</code> /
|
|---|
| 73 | <code>_GNU_SOURCE</code> / etc is always defined</a>
|
|---|
| 74 | </li>
|
|---|
| 75 | <li><a href="#3_6">OS X ctype.h is broken! How can I hack it?</a></li>
|
|---|
| 76 | <li><a href="#3_7">Threading is broken on i386</a></li>
|
|---|
| 77 | <li><a href="#3_8">Recent GNU/Linux glibc required?</a></li>
|
|---|
| 78 | <li><a href="#3_9">Can't use wchar_t/wstring on FreeBSD</a></li>
|
|---|
| 79 | <li><a href="#3_10">MIPS atomic operations</a></li>
|
|---|
| 80 | </ol>
|
|---|
| 81 | </li>
|
|---|
| 82 |
|
|---|
| 83 | <li><a href="#4_0">Known Bugs and Non-Bugs</a>
|
|---|
| 84 | <ol>
|
|---|
| 85 | <li><a href="#4_1">What works already?</a> </li>
|
|---|
| 86 | <li><a href="#4_2">Bugs in gcc/g++ (not libstdc++-v3)</a> </li>
|
|---|
| 87 | <li><a href="#4_3">Bugs in the C++ language/lib specification</a> </li>
|
|---|
| 88 | <li><a href="#4_4">Things in libstdc++ that only look like bugs</a><ul>
|
|---|
| 89 | <li><a href="#4_4_iostreamclear">reopening a stream fails</a> </li>
|
|---|
| 90 | <li><a href="#4_4_Weff">-Weffc++ complains too much</a> </li>
|
|---|
| 91 | <li><a href="#4_4_rel_ops">"ambiguous overloads"
|
|---|
| 92 | after including an old-style header</a> </li>
|
|---|
| 93 | <li><a href="#4_4_interface">The g++-3 headers are
|
|---|
| 94 | <strong>not ours</strong></a> </li>
|
|---|
| 95 | <li><a href="#4_4_glibc">compilation errors from streambuf.h</a> </li>
|
|---|
| 96 | <li><a href="#4_4_checks">errors about <em>*Concept</em> and
|
|---|
| 97 | <em>constraints</em> in the STL...</a> </li>
|
|---|
| 98 | <li><a href="#4_4_dlsym">program crashes when using library code
|
|---|
| 99 | in a dynamically-loaded library</a> </li>
|
|---|
| 100 | <li><a href="#4_4_leak">"memory leaks" in containers</a> </li>
|
|---|
| 101 | </ul>
|
|---|
| 102 | </li>
|
|---|
| 103 | <li><a href="#4_5">Aw, that's easy to fix!</a> </li>
|
|---|
| 104 | </ol>
|
|---|
| 105 | </li>
|
|---|
| 106 |
|
|---|
| 107 | <li><a href="#5_0">Miscellaneous</a>
|
|---|
| 108 | <ol>
|
|---|
| 109 | <li><a href="#5_1">string::iterator is not char*;
|
|---|
| 110 | vector<T>::iterator is not T*</a> </li>
|
|---|
| 111 | <li><a href="#5_2">What's next after libstdc++-v3?</a> </li>
|
|---|
| 112 | <li><a href="#5_3">What about the STL from SGI?</a> </li>
|
|---|
| 113 | <li><a href="#5_4">Extensions and Backward Compatibility</a> </li>
|
|---|
| 114 | <li><a href="#5_5">[removed]</a> </li>
|
|---|
| 115 | <li><a href="#5_6">Is libstdc++-v3 thread-safe?</a> </li>
|
|---|
| 116 | <li><a href="#5_7">How do I get a copy of the ISO C++ Standard?</a> </li>
|
|---|
| 117 | <li><a href="#5_8">What's an ABI and why is it so messy?</a> </li>
|
|---|
| 118 | </ol>
|
|---|
| 119 | </li>
|
|---|
| 120 |
|
|---|
| 121 | </ol>
|
|---|
| 122 |
|
|---|
| 123 | <hr />
|
|---|
| 124 |
|
|---|
| 125 | <!-- ####################################################### -->
|
|---|
| 126 |
|
|---|
| 127 | <h1><a name="1_0">1.0 General Information</a></h1>
|
|---|
| 128 | <!-- I suspect these will mostly be links to/into existing documents. -->
|
|---|
| 129 | <h2><a name="1_1">1.1 What is libstdc++-v3?</a></h2>
|
|---|
| 130 | <p>The GNU Standard C++ Library v3 is an
|
|---|
| 131 | ongoing project to implement the ISO 14882 Standard C++ library
|
|---|
| 132 | as described in chapters 17 through 27 and annex D. As the
|
|---|
| 133 | library reaches stable plateaus, it is captured in a snapshot
|
|---|
| 134 | and released. The latest release is
|
|---|
| 135 | <a href="http://gcc.gnu.org/libstdc++/index.html#download">the
|
|---|
| 136 | fourteenth snapshot</a> but newer versions have been included
|
|---|
| 137 | in recent GCC releases. For those who want to see exactly how
|
|---|
| 138 | far the project has come, or just want the latest
|
|---|
| 139 | bleeding-edge code, the up-to-date source is available over
|
|---|
| 140 | anonymous CVS, and can even be browsed over the Web (see
|
|---|
| 141 | <a href="#1_4">1.4</a> below).
|
|---|
| 142 | </p>
|
|---|
| 143 | <p>The older libstdc++-v2 project is no longer maintained; the code
|
|---|
| 144 | has been completely replaced and rewritten.
|
|---|
| 145 | <a href="#4_4_interface">If you are using V2</a>, then you need to
|
|---|
| 146 | report bugs to your system vendor, not to the V3 list.
|
|---|
| 147 | </p>
|
|---|
| 148 | <p>A more formal description of the V3 goals can be found in the
|
|---|
| 149 | official <a href="../17_intro/DESIGN">design document</a>.
|
|---|
| 150 | </p>
|
|---|
| 151 |
|
|---|
| 152 | <hr />
|
|---|
| 153 | <h2><a name="1_2">1.2 Why should I use libstdc++?</a></h2>
|
|---|
| 154 | <p>The completion of the ISO C++ standardization gave the
|
|---|
| 155 | C++ community a powerful set of reuseable tools in the form
|
|---|
| 156 | of the C++ Standard Library. However, all existing C++
|
|---|
| 157 | implementations are (as the Draft Standard used to say)
|
|---|
| 158 | "incomplet and incorrekt," and many suffer from
|
|---|
| 159 | limitations of the compilers that use them.
|
|---|
| 160 | </p>
|
|---|
| 161 | <p>The GNU C/C++/FORTRAN/<pick-a-language> compiler
|
|---|
| 162 | (<code>gcc</code>, <code>g++</code>, etc) is widely considered to be
|
|---|
| 163 | one of the leading compilers in the world. Its development
|
|---|
| 164 | has recently been taken over by the
|
|---|
| 165 | <a href="http://gcc.gnu.org/">GCC team</a>. All of
|
|---|
| 166 | the rapid development and near-legendary
|
|---|
| 167 | <a href="http://gcc.gnu.org/gcc-3.0/buildstat.html">portability</a>
|
|---|
| 168 | that are the hallmarks of an open-source project are being
|
|---|
| 169 | applied to libstdc++.
|
|---|
| 170 | </p>
|
|---|
| 171 | <p>That means that all of the Standard classes and functions
|
|---|
| 172 | (such as <code>string</code>, <code>vector<></code>, iostreams,
|
|---|
| 173 | and algorithms) will be freely available and fully compliant.
|
|---|
| 174 | Programmers will no longer need to "roll their own"
|
|---|
| 175 | nor be worried about platform-specific incompatibilities.
|
|---|
| 176 | </p>
|
|---|
| 177 |
|
|---|
| 178 | <hr />
|
|---|
| 179 | <h2><a name="1_3">1.3 Who's in charge of it?</a></h2>
|
|---|
| 180 | <p>The libstdc++ project is contributed to by several developers
|
|---|
| 181 | all over the world, in the same way as GCC or Linux.
|
|---|
| 182 | Benjamin Kosnik, Gabriel Dos Reis, Phil Edwards, Ulrich Drepper,
|
|---|
| 183 | Loren James Rittle, and Paolo Carlini are the lead maintainers of
|
|---|
| 184 | the CVS archive.
|
|---|
| 185 | </p>
|
|---|
| 186 | <p>Development and discussion is held on the libstdc++ mailing
|
|---|
| 187 | list. Subscribing to the list, or searching the list
|
|---|
| 188 | archives, is open to everyone. You can read instructions for
|
|---|
| 189 | doing so on the <a href="http://gcc.gnu.org/libstdc++/">homepage</a>.
|
|---|
| 190 | If you have questions, ideas, code, or are just curious, sign up!
|
|---|
| 191 | </p>
|
|---|
| 192 |
|
|---|
| 193 | <hr />
|
|---|
| 194 | <h2><a name="1_4">1.4 How do I get libstdc++?</a></h2>
|
|---|
| 195 | <p>The <a href="http://gcc.gnu.org/libstdc++/">homepage</a>
|
|---|
| 196 | has instructions for retrieving the latest CVS sources, and for
|
|---|
| 197 | browsing the CVS sources over the web.
|
|---|
| 198 | </p>
|
|---|
| 199 | <p>Stable versions of libstdc++-v3 are included with releases of
|
|---|
| 200 | <a href="http://gcc.gnu.org/releases.html">the GCC compilers</a>.
|
|---|
| 201 | </p>
|
|---|
| 202 | <p>The subset commonly known as the Standard Template Library
|
|---|
| 203 | (chapters 23 through 25, mostly) is adapted from the final release
|
|---|
| 204 | of the SGI STL.
|
|---|
| 205 | </p>
|
|---|
| 206 |
|
|---|
| 207 | <hr />
|
|---|
| 208 | <h2><a name="1_5">1.5 When is libstdc++ going to be finished?</a></h2>
|
|---|
| 209 | <!-- <p>Nathan Myers gave the best of all possible answers in <a
|
|---|
| 210 | href="http://www.deja.com/getdoc.xp?AN=469581698&fmt=text">a
|
|---|
| 211 | Usenet article</a>.</p>
|
|---|
| 212 | which is no longer available, thanks deja...-->
|
|---|
| 213 | <p>Nathan Myers gave the best of all possible answers, responding to a
|
|---|
| 214 | Usenet article asking this question: <em>Sooner, if you help.</em>
|
|---|
| 215 | </p>
|
|---|
| 216 |
|
|---|
| 217 | <hr />
|
|---|
| 218 | <h2><a name="1_6">1.6 How do I contribute to the effort?</a></h2>
|
|---|
| 219 | <p>Here is <a href="../17_intro/contribute.html">a
|
|---|
| 220 | page devoted to this topic</a>. Subscribing to the mailing
|
|---|
| 221 | list (see above, or the homepage) is a very good idea if you
|
|---|
| 222 | have something to contribute, or if you have spare time and
|
|---|
| 223 | want to help. Contributions don't have to be in the form of
|
|---|
| 224 | source code; anybody who is willing to help write
|
|---|
| 225 | documentation, for example, or has found a bug in code that
|
|---|
| 226 | we all thought was working, is more than welcome!
|
|---|
| 227 | </p>
|
|---|
| 228 |
|
|---|
| 229 | <hr />
|
|---|
| 230 | <h2><a name="1_7">1.7 What happened to libg++? I need that!</a></h2>
|
|---|
| 231 | <p>The most recent libg++ README states that libg++ is no longer
|
|---|
| 232 | being actively maintained. It should not be used for new
|
|---|
| 233 | projects, and is only being kicked along to support older code.
|
|---|
| 234 | </p>
|
|---|
| 235 | <p>The libg++ was designed and created when there was no Standard
|
|---|
| 236 | to provide guidance. Classes like linked lists are now provided
|
|---|
| 237 | for by <code>list<T></code> and do not need to be created by
|
|---|
| 238 | <code>genclass</code>. (For that matter, templates exist now and
|
|---|
| 239 | are well-supported, whereas genclass (mostly) predates them.)
|
|---|
| 240 | </p>
|
|---|
| 241 | <p>There are other classes in libg++ that are not specified in the
|
|---|
| 242 | ISO Standard (e.g., statistical analysis). While there are a
|
|---|
| 243 | lot of really useful things that are used by a lot of people
|
|---|
| 244 | (e.g., statistics :-), the Standards Committee couldn't include
|
|---|
| 245 | everything, and so a lot of those "obvious" classes
|
|---|
| 246 | didn't get included.
|
|---|
| 247 | </p>
|
|---|
| 248 | <p>Since libstdc++ is an implementation of the Standard Library, we
|
|---|
| 249 | have no plans at this time to include non-Standard utilities
|
|---|
| 250 | in the implementation, however handy they are. (The extensions
|
|---|
| 251 | provided in the SGI STL aren't maintained by us and don't get
|
|---|
| 252 | a lot of our attention, because they don't require a lot of our
|
|---|
| 253 | time.) It is entirely plausable that the "useful stuff"
|
|---|
| 254 | from libg++ might be extracted into an updated utilities library,
|
|---|
| 255 | but nobody has started such a project yet.
|
|---|
| 256 | </p>
|
|---|
| 257 | <p>(The <a href="http://www.boost.org/">Boost</a> site houses free
|
|---|
| 258 | C++ libraries that do varying things, and happened to be started
|
|---|
| 259 | by members of the Standards Committee. Certain "useful
|
|---|
| 260 | stuff" classes will probably migrate there.)
|
|---|
| 261 | </p>
|
|---|
| 262 | <p>For the bold and/or desperate, the
|
|---|
| 263 | <a href="http://gcc.gnu.org/extensions.html">GCC extensions page</a>
|
|---|
| 264 | describes where to find the last libg++ source.
|
|---|
| 265 | </p>
|
|---|
| 266 |
|
|---|
| 267 | <hr />
|
|---|
| 268 | <h2><a name="1_8">1.8 What if I have more questions?</a></h2>
|
|---|
| 269 | <p>If you have read the README and RELEASE-NOTES files, and your
|
|---|
| 270 | question remains unanswered, then just ask the mailing list.
|
|---|
| 271 | At present, you do not need to be subscribed to the list to
|
|---|
| 272 | send a message to it. More information is available on the
|
|---|
| 273 | homepage (including how to browse the list archives); to send
|
|---|
| 274 | to the list, use <a href="mailto:[email protected]">
|
|---|
| 275 | <code>[email protected]</code></a>.
|
|---|
| 276 | </p>
|
|---|
| 277 | <p>If you have a question that you think should be included here,
|
|---|
| 278 | or if you have a question <em>about</em> a question/answer here,
|
|---|
| 279 | contact <a href="mailto:[email protected]">Phil Edwards</a>
|
|---|
| 280 | or <a href="mailto:[email protected]">Gabriel Dos Reis</a>.
|
|---|
| 281 | </p>
|
|---|
| 282 |
|
|---|
| 283 | <hr />
|
|---|
| 284 | <h2><a name="1_9">1.9 What are the license terms for libstdc++-v3?</a></h2>
|
|---|
| 285 | <p>See <a href="../17_intro/license.html">our license description</a>
|
|---|
| 286 | for these and related questions.
|
|---|
| 287 | </p>
|
|---|
| 288 |
|
|---|
| 289 | <hr />
|
|---|
| 290 | <h1><a name="2_0">2.0 Installation</a></h1>
|
|---|
| 291 | <h2><a name="2_1">2.1 How do I install libstdc++-v3?</a></h2>
|
|---|
| 292 | <p>Complete instructions are not given here (this is a FAQ, not
|
|---|
| 293 | an installation document), but the tools required are few:
|
|---|
| 294 | </p>
|
|---|
| 295 | <ul>
|
|---|
| 296 | <li> A 3.x release of GCC. Note that building GCC is much
|
|---|
| 297 | easier and more automated than building the GCC 2.[78]
|
|---|
| 298 | series was. If you are using GCC 2.95, you can still
|
|---|
| 299 | build earlier snapshots of libstdc++.
|
|---|
| 300 | </li>
|
|---|
| 301 | <li> GNU Make is recommended, but should not be required.
|
|---|
| 302 | </li>
|
|---|
| 303 | <li> The GNU Autotools are needed if you are messing with
|
|---|
| 304 | the configury or makefiles.
|
|---|
| 305 | </li>
|
|---|
| 306 | </ul>
|
|---|
| 307 | <p>The file <a href="../documentation.html">documentation.html</a>
|
|---|
| 308 | provides a good overview of the steps necessary to build, install,
|
|---|
| 309 | and use the library. Instructions for configuring the library
|
|---|
| 310 | with new flags such as --enable-threads are there also, as well as
|
|---|
| 311 | patches and instructions for working with GCC 2.95.
|
|---|
| 312 | </p>
|
|---|
| 313 | <p>The top-level install.html and
|
|---|
| 314 | <a href="../17_intro/RELEASE-NOTES">RELEASE-NOTES</a> files contain
|
|---|
| 315 | the exact build and installation instructions. You may wish to
|
|---|
| 316 | browse those files over CVSweb ahead of time to get a feel for
|
|---|
| 317 | what's required. RELEASE-NOTES is located in the
|
|---|
| 318 | ".../docs/17_intro/" directory of the distribution.
|
|---|
| 319 | </p>
|
|---|
| 320 |
|
|---|
| 321 | <hr />
|
|---|
| 322 | <h2><a name="2_2">2.2 [removed]</a></h2>
|
|---|
| 323 | <p>This question has become moot and has been removed. The stub
|
|---|
| 324 | is here to preserve numbering (and hence links/bookmarks).
|
|---|
| 325 | </p>
|
|---|
| 326 |
|
|---|
| 327 | <hr />
|
|---|
| 328 | <h2><a name="2_3">2.3 What is this CVS thing that you
|
|---|
| 329 | keep mentioning?</a></h2>
|
|---|
| 330 | <p>The <em>Concurrent Versions System</em> is one of several revision
|
|---|
| 331 | control packages. It was selected for GNU projects because it's
|
|---|
| 332 | free (speech), free (beer), and very high quality. The <a
|
|---|
| 333 | href="http://www.gnu.org/software/cvs/cvs.html">CVS entry in
|
|---|
| 334 | the GNU software catalogue</a> has a better description as
|
|---|
| 335 | well as a
|
|---|
| 336 | <a href="http://www.cvshome.org/">link to the makers of CVS</a>.
|
|---|
| 337 | </p>
|
|---|
| 338 | <p>The "anonymous client checkout" feature of CVS is
|
|---|
| 339 | similar to anonymous FTP in that it allows anyone to retrieve
|
|---|
| 340 | the latest libstdc++ sources.
|
|---|
| 341 | </p>
|
|---|
| 342 | <p>After the first of April, American users will have a
|
|---|
| 343 | "/pharmacy" command-line option...
|
|---|
| 344 | <!-- wonder how long that'll live -->
|
|---|
| 345 | </p>
|
|---|
| 346 |
|
|---|
| 347 | <hr />
|
|---|
| 348 | <h2><a name="2_4">2.4 How do I know if it works?</a></h2>
|
|---|
| 349 | <p>libstdc++-v3 comes with its own testsuite. You do not need
|
|---|
| 350 | to actually install the library ("<code>make
|
|---|
| 351 | install</code>") to run the testsuite, but you do need
|
|---|
| 352 | DejaGNU, as described
|
|---|
| 353 | <a href="http://gcc.gnu.org/install/test.html">here</a>.
|
|---|
| 354 | </p>
|
|---|
| 355 | <p>To run the testsuite on the library after building it, use
|
|---|
| 356 | "make check" while in your build directory. To run
|
|---|
| 357 | the testsuite on the library after building and installing it,
|
|---|
| 358 | use "make check-install" instead.
|
|---|
| 359 | </p>
|
|---|
| 360 | <p>If you find bugs in the testsuite programs themselves, or if you
|
|---|
| 361 | think of a new test program that should be added to the suite,
|
|---|
| 362 | <strong>please</strong> write up your idea and send it to the list!
|
|---|
| 363 | </p>
|
|---|
| 364 |
|
|---|
| 365 | <hr />
|
|---|
| 366 | <h2><a name="2_5">2.5 This library is HUGE! And what's libsupc++?</a></h2>
|
|---|
| 367 | <p>Usually the size of libraries on disk isn't noticeable. When a
|
|---|
| 368 | link editor (or simply "linker") pulls things from a
|
|---|
| 369 | static archive library, only the necessary object files are copied
|
|---|
| 370 | into your executable, not the entire library. Unfortunately, even
|
|---|
| 371 | if you only need a single function or variable from an object file,
|
|---|
| 372 | the entire object file is extracted. (There's nothing unique to C++
|
|---|
| 373 | or libstdc++-v3 about this; it's just common behavior, given here
|
|---|
| 374 | for background reasons.)
|
|---|
| 375 | </p>
|
|---|
| 376 | <p>Some of the object files which make up libstdc++.a are rather large.
|
|---|
| 377 | If you create a statically-linked executable with
|
|---|
| 378 | <code> -static</code>, those large object files are suddenly part
|
|---|
| 379 | of your executable. Historically the best way around this was to
|
|---|
| 380 | only place a very few functions (often only a single one) in each
|
|---|
| 381 | source/object file; then extracting a single function is the same
|
|---|
| 382 | as extracting a single .o file. For libstdc++-v3 this is only
|
|---|
| 383 | possible to a certain extent; the object files in question contain
|
|---|
| 384 | template classes and template functions, pre-instantiated, and
|
|---|
| 385 | splitting those up causes severe maintenance headaches.
|
|---|
| 386 | </p>
|
|---|
| 387 | <p>It's not a bug, and it's not really a problem. Nevertheless, some
|
|---|
| 388 | people don't like it, so here are two pseudo-solutions:
|
|---|
| 389 | </p>
|
|---|
| 390 | <p>If the only functions from libstdc++.a which you need are language
|
|---|
| 391 | support functions (those listed in
|
|---|
| 392 | <a href="../18_support/howto.html">clause 18</a> of the standard,
|
|---|
| 393 | e.g., <code>new</code> and <code>delete</code>), then try linking
|
|---|
| 394 | against <code>libsupc++.a</code> (usually specifying
|
|---|
| 395 | <code>-lsupc++</code> when calling g++ for the final link step will
|
|---|
| 396 | do it). This library contains only those support routines, one per
|
|---|
| 397 | object file. But if you are using anything from the rest of the
|
|---|
| 398 | library, such as IOStreams or vectors, then you'll still need
|
|---|
| 399 | pieces from <code>libstdc++.a</code>.
|
|---|
| 400 | </p>
|
|---|
| 401 | <p>The second method is one we hope to incorporate into the library
|
|---|
| 402 | build process. Some platforms can place each function and variable
|
|---|
| 403 | into its own section in a .o file. The GNU linker can then perform
|
|---|
| 404 | garbage collection on unused sections; this reduces the situation
|
|---|
| 405 | to only copying needed functions into the executable, as before,
|
|---|
| 406 | but all happens automatically.
|
|---|
| 407 | </p>
|
|---|
| 408 | <p>Unfortunately the garbage collection in GNU ld is buggy; sections
|
|---|
| 409 | (corresponding to functions and variables) which <em>are</em> used
|
|---|
| 410 | are mistakenly removed, leading to horrible crashes when your
|
|---|
| 411 | executable starts up. For the time being, this feature is not used
|
|---|
| 412 | when building the library.
|
|---|
| 413 | </p>
|
|---|
| 414 |
|
|---|
| 415 | <hr />
|
|---|
| 416 | <h1><a name="3_0">3.0 Platform-Specific Issues</a></h1>
|
|---|
| 417 | <h2><a name="3_1">3.1 Can libstdc++-v3 be used with <my
|
|---|
| 418 | favorite compiler>?</a></h2>
|
|---|
| 419 | <p>Probably not. Yet.</p>
|
|---|
| 420 | <p>Because GCC advances so rapidly, development and testing of
|
|---|
| 421 | libstdc++ is being done almost entirely under that compiler.
|
|---|
| 422 | If you are curious about whether other, lesser compilers
|
|---|
| 423 | (*grin*) support libstdc++, you are more than welcome to try.
|
|---|
| 424 | Configuring and building the library (see above) will still
|
|---|
| 425 | require certain tools, however. Also keep in mind that
|
|---|
| 426 | <em>building</em> libstdc++ does not imply that your compiler
|
|---|
| 427 | will be able to <em>use</em> all of the features found in the
|
|---|
| 428 | C++ Standard Library.
|
|---|
| 429 | </p>
|
|---|
| 430 | <p>Since the goal of ISO Standardization is for all C++
|
|---|
| 431 | implementations to be able to share code, the final libstdc++
|
|---|
| 432 | should, in theory, be usable under any ISO-compliant
|
|---|
| 433 | compiler. It will still be targeted and optimized for
|
|---|
| 434 | GCC/g++, however.
|
|---|
| 435 | </p>
|
|---|
| 436 |
|
|---|
| 437 | <hr />
|
|---|
| 438 | <h2><a name="3_2">3.2 [removed]</a></h2>
|
|---|
| 439 | <p>This question has become moot and has been removed. The stub
|
|---|
| 440 | is here to preserve numbering (and hence links/bookmarks).
|
|---|
| 441 | </p>
|
|---|
| 442 |
|
|---|
| 443 | <hr />
|
|---|
| 444 | <h2><a name="3_3">3.3 [removed]</a></h2>
|
|---|
| 445 | <p>This question has become moot and has been removed. The stub
|
|---|
| 446 | is here to preserve numbering (and hence links/bookmarks).
|
|---|
| 447 | </p>
|
|---|
| 448 |
|
|---|
| 449 | <hr />
|
|---|
| 450 | <h2><a name="3_4">3.4 I can't use 'long long' on Solaris</a></h2>
|
|---|
| 451 | <p>By default we try to support the C99 <code>long long</code> type.
|
|---|
| 452 | This requires that certain functions from your C library be present.
|
|---|
| 453 | </p>
|
|---|
| 454 | <p>Up through release 3.0.2 the tests performed were too general, and
|
|---|
| 455 | this feature was disabled when it did not need to be. The most
|
|---|
| 456 | commonly reported platform affected was Solaris.
|
|---|
| 457 | </p>
|
|---|
| 458 | <p>This has been fixed for 3.0.3 and onwards.
|
|---|
| 459 | </p>
|
|---|
| 460 |
|
|---|
| 461 | <hr />
|
|---|
| 462 | <h2><a name="3_5">3.5 <code>_XOPEN_SOURCE</code> / <code>_GNU_SOURCE</code>
|
|---|
| 463 | / etc is always defined</a></h2>
|
|---|
| 464 | <p>On Solaris, g++ (but not gcc) always defines the preprocessor
|
|---|
| 465 | macro <code>_XOPEN_SOURCE</code>. On GNU/Linux, the same happens
|
|---|
| 466 | with <code>_GNU_SOURCE</code>. (This is not an exhaustive list;
|
|---|
| 467 | other macros and other platforms are also affected.)
|
|---|
| 468 | </p>
|
|---|
| 469 | <p>These macros are typically used in C library headers, guarding new
|
|---|
| 470 | versions of functions from their older versions. The C++ standard
|
|---|
| 471 | library includes the C standard library, but it requires the C90
|
|---|
| 472 | version, which for backwards-compatability reasons is often not the
|
|---|
| 473 | default for many vendors.
|
|---|
| 474 | </p>
|
|---|
| 475 | <p>More to the point, the C++ standard requires behavior which is only
|
|---|
| 476 | available on certain platforms after certain symbols are defined.
|
|---|
| 477 | Usually the issue involves I/O-related typedefs. In order to
|
|---|
| 478 | ensure correctness, the compiler simply predefines those symbols.
|
|---|
| 479 | </p>
|
|---|
| 480 | <p>Note that it's not enough to #define them only when the library is
|
|---|
| 481 | being built (during installation). Since we don't have an 'export'
|
|---|
| 482 | keyword, much of the library exists as headers, which means that
|
|---|
| 483 | the symbols must also be defined as your programs are parsed and
|
|---|
| 484 | compiled.
|
|---|
| 485 | </p>
|
|---|
| 486 | <p>To see which symbols are defined, look for CPLUSPLUS_CPP_SPEC in
|
|---|
| 487 | the gcc config headers for your target (and try changing them to
|
|---|
| 488 | see what happens when building complicated code). You can also run
|
|---|
| 489 | <code>"g++ -E -dM - < /dev/null"</code> to display
|
|---|
| 490 | a list of predefined macros for any particular installation.
|
|---|
| 491 | </p>
|
|---|
| 492 | <p>This has been discussed on the mailing lists
|
|---|
| 493 | <a href="http://gcc.gnu.org/cgi-bin/htsearch?method=and&format=builtin-long&sort=score&words=_XOPEN_SOURCE+Solaris">quite a bit</a>.
|
|---|
| 494 | </p>
|
|---|
| 495 | <p>This method is something of a wart. We'd like to find a cleaner
|
|---|
| 496 | solution, but nobody yet has contributed the time.
|
|---|
| 497 | </p>
|
|---|
| 498 |
|
|---|
| 499 | <hr />
|
|---|
| 500 | <h2><a name="3_6">3.6 OS X ctype.h is broken! How can I hack it?</a></h2>
|
|---|
| 501 | <p>This is a long-standing bug in the OS X support. Fortunately,
|
|---|
| 502 | the patch is quite simple, and well-known.
|
|---|
| 503 | <a href="http://gcc.gnu.org/ml/gcc/2002-03/msg00817.html"> Here's a
|
|---|
| 504 | link to the solution.</a>
|
|---|
| 505 | </p>
|
|---|
| 506 |
|
|---|
| 507 | <hr />
|
|---|
| 508 | <h2><a name="3_7">3.7 Threading is broken on i386</a></h2>
|
|---|
| 509 | <p>Support for atomic integer operations is/was broken on i386
|
|---|
| 510 | platforms. The assembly code accidentally used opcodes that are
|
|---|
| 511 | only available on the i486 and later. So if you configured GCC
|
|---|
| 512 | to target, for example, i386-linux, but actually used the programs
|
|---|
| 513 | on an i686, then you would encounter no problems. Only when
|
|---|
| 514 | actually running the code on a i386 will the problem appear.
|
|---|
| 515 | </p>
|
|---|
| 516 | <p>This is fixed in 3.2.2.
|
|---|
| 517 | </p>
|
|---|
| 518 |
|
|---|
| 519 | <hr />
|
|---|
| 520 | <h2><a name="3_8">3.8 Recent GNU/Linux glibc required?</a></h2>
|
|---|
| 521 | <p>When running on GNU/Linux, libstdc++ 3.2.1 (shared library version
|
|---|
| 522 | 5.0.1) and later uses localization and formatting code from the system
|
|---|
| 523 | C library (glibc) version 2.2.5. That version of glibc is over a
|
|---|
| 524 | year old and contains necessary bugfixes. Many GNU/Linux distros make
|
|---|
| 525 | glibc version 2.3.x available now.
|
|---|
| 526 | </p>
|
|---|
| 527 | <p>The guideline is simple: the more recent the C++ library, the
|
|---|
| 528 | more recent the C library. (This is also documented in the main
|
|---|
| 529 | GCC installation instructions.)
|
|---|
| 530 | </p>
|
|---|
| 531 |
|
|---|
| 532 | <hr />
|
|---|
| 533 | <h2><a name="3_9">3.9 Can't use wchar_t/wstring on FreeBSD</a></h2>
|
|---|
| 534 | <p>At the moment there are a few problems in FreeBSD's support for
|
|---|
| 535 | wide character functions, and as a result the libstdc++ configury
|
|---|
| 536 | decides that wchar_t support should be disabled. Once the underlying
|
|---|
| 537 | problems are fixed in FreeBSD (soon), the library support will
|
|---|
| 538 | automatically enable itself.
|
|---|
| 539 | </p>
|
|---|
| 540 | <p>You can fix the problems yourself, and learn more about the situation,
|
|---|
| 541 | by reading
|
|---|
| 542 | <a href="http://gcc.gnu.org/ml/libstdc++/2003-02/subjects.html#00286">
|
|---|
| 543 | this short thread</a> ("_GLIBCPP_USE_WCHAR_T undefined in
|
|---|
| 544 | FreeBSD's c++config.h?").
|
|---|
| 545 | </p>
|
|---|
| 546 |
|
|---|
| 547 | <hr />
|
|---|
| 548 | <h2><a name="3_10">3.10 MIPS atomic operations</a></h2>
|
|---|
| 549 | <p>The atomic locking routines for MIPS targets requires MIPS II
|
|---|
| 550 | and later. A patch went in just after the 3.3 release to
|
|---|
| 551 | make mips* use the generic implementation instead. You can also
|
|---|
| 552 | configure for mipsel-elf as a workaround.
|
|---|
| 553 | </p>
|
|---|
| 554 | <p>mips*-*-linux* continues to use the MIPS II routines, and more
|
|---|
| 555 | work in this area is expected.
|
|---|
| 556 | </p>
|
|---|
| 557 |
|
|---|
| 558 | <hr />
|
|---|
| 559 | <h1><a name="4_0">4.0 Known Bugs and Non-Bugs</a></h1>
|
|---|
| 560 | <em>Note that this section can get rapdily outdated -- such is the
|
|---|
| 561 | nature of an open-source project. For the latest information, join
|
|---|
| 562 | the mailing list or look through recent archives. The RELEASE-
|
|---|
| 563 | NOTES and BUGS files are generally kept up-to-date.</em>
|
|---|
| 564 |
|
|---|
| 565 | <p>For 3.0.1, the most common "bug" is an apparently missing
|
|---|
| 566 | "<code>../</code>" in include/Makefile, resulting in files
|
|---|
| 567 | like gthr.h and gthr-single.h not being found. Please read
|
|---|
| 568 | <a href="http://gcc.gnu.org/install/configure.html">the configuration
|
|---|
| 569 | instructions for GCC</a>,
|
|---|
| 570 | specifically the part about configuring in a separate build directory,
|
|---|
| 571 | and how strongly recommended it is. Building in the source directory
|
|---|
| 572 | is fragile, is rarely tested, and tends to break, as in this case.
|
|---|
| 573 | This was fixed for 3.0.2.
|
|---|
| 574 | </p>
|
|---|
| 575 |
|
|---|
| 576 | <p>For 3.1, the most common "bug" is a parse error when using
|
|---|
| 577 | <code><fstream></code>, ending with a message,
|
|---|
| 578 | "<code>bits/basic_file.h:52: parse error before `{'
|
|---|
| 579 | token</code>." Please read
|
|---|
| 580 | <a href="http://gcc.gnu.org/install/">the installation instructions for
|
|---|
| 581 | GCC</a>, specifically the part about not installing newer versions on
|
|---|
| 582 | top of older versions. If you install 3.1 over a 3.0.x release, then
|
|---|
| 583 | the wrong basic_file.h header will be found (its location changed
|
|---|
| 584 | between releases).
|
|---|
| 585 | </p>
|
|---|
| 586 |
|
|---|
| 587 | <p><strong>Please do not report these as bugs. We know about them.</strong>
|
|---|
| 588 | Reporting this -- or any other problem that's already been fixed --
|
|---|
| 589 | hinders the development of GCC, because we have to take time to
|
|---|
| 590 | respond to your report. Thank you.
|
|---|
| 591 | </p>
|
|---|
| 592 |
|
|---|
| 593 | <h2><a name="4_1">4.1 What works already?</a></h2>
|
|---|
| 594 | <p>Short answer: Pretty much everything <em>works</em> except for some
|
|---|
| 595 | corner cases. Also, localization is incomplete. For whether it works
|
|---|
| 596 | well, or as you expect it to work, see 5.2.
|
|---|
| 597 | </p>
|
|---|
| 598 | <p>Long answer: See the docs/html/17_intro/CHECKLIST file, which is
|
|---|
| 599 | badly outdated...
|
|---|
| 600 | </p>
|
|---|
| 601 | <p>What follows is a verbatim clip from the "Status" section
|
|---|
| 602 | of the RELEASE-NOTES for the latest snapshot. For a list of
|
|---|
| 603 | fixed bugs, see that file.
|
|---|
| 604 | </p>
|
|---|
| 605 |
|
|---|
| 606 | <!-- Yeah, I meant that "verbatim clip" thing literally... :-) -->
|
|---|
| 607 |
|
|---|
| 608 | <pre>
|
|---|
| 609 | New:
|
|---|
| 610 | </pre>
|
|---|
| 611 |
|
|---|
| 612 |
|
|---|
| 613 | <hr />
|
|---|
| 614 | <h2><a name="4_2">4.2 Bugs in gcc/g++ (not libstdc++-v3)</a></h2>
|
|---|
| 615 | <p>This is by no means meant to be complete nor exhaustive, but
|
|---|
| 616 | mentions some problems that users may encounter when building
|
|---|
| 617 | or using libstdc++. If you are experiencing one of these
|
|---|
| 618 | problems, you can find more information on the libstdc++ and
|
|---|
| 619 | the GCC mailing lists.
|
|---|
| 620 | </p>
|
|---|
| 621 | <p>Before reporting a bug, examine the
|
|---|
| 622 | <a href="http://gcc.gnu.org/bugs.html">bugs database</a> with the
|
|---|
| 623 | category set to "libstdc++". The BUGS file in the source
|
|---|
| 624 | tree also tracks known serious problems.
|
|---|
| 625 | </p>
|
|---|
| 626 | <ul>
|
|---|
| 627 | <li>Debugging is problematic, due to bugs in line-number generation
|
|---|
| 628 | (mostly fixed in the compiler) and gdb lagging behind the
|
|---|
| 629 | compiler (lack of personnel). We recommend configuring the
|
|---|
| 630 | compiler using <code>--with-dwarf2</code> if the DWARF2
|
|---|
| 631 | debugging format is not already the default on your platform.
|
|---|
| 632 | Also,
|
|---|
| 633 | <a href="http://gcc.gnu.org/ml/libstdc++/2002-02/msg00034.html">changing your
|
|---|
| 634 | GDB settings</a> can have a profound effect on your C++ debugging
|
|---|
| 635 | experiences. :-)</li>
|
|---|
| 636 | </ul>
|
|---|
| 637 |
|
|---|
| 638 | <hr />
|
|---|
| 639 | <h2><a name="4_3">4.3 Bugs in the C++ language/lib specification</a></h2>
|
|---|
| 640 | <p>Yes, unfortunately, there are some. In a
|
|---|
| 641 | <a href="http://gcc.gnu.org/ml/libstdc++/1998/msg00006.html">message
|
|---|
| 642 | to the list</a>, Nathan Myers announced that he has started a list of
|
|---|
| 643 | problems in the ISO C++ Standard itself, especially with
|
|---|
| 644 | regard to the chapters that concern the library. The list
|
|---|
| 645 | itself is
|
|---|
| 646 | <a href="http://www.cantrip.org/draft-bugs.txt">posted on his
|
|---|
| 647 | website</a>. Developers who are having problems interpreting
|
|---|
| 648 | the Standard may wish to consult his notes.
|
|---|
| 649 | </p>
|
|---|
| 650 | <p>For those people who are not part of the ISO Library Group
|
|---|
| 651 | (i.e., nearly all of us needing to read this page in the first
|
|---|
| 652 | place :-), a public list of the library defects is occasionally
|
|---|
| 653 | published <a href="http://anubis.dkuug.dk/jtc1/sc22/wg21/">here</a>.
|
|---|
| 654 | Some of these have resulted in <a href="#5_2">code changes</a>.
|
|---|
| 655 | </p>
|
|---|
| 656 |
|
|---|
| 657 | <hr />
|
|---|
| 658 | <h2><a name="4_4">4.4 Things in libstdc++ that only look like bugs</a></h2>
|
|---|
| 659 | <p>There are things which are not bugs in the compiler (4.2) nor
|
|---|
| 660 | the language specification (4.3), but aren't really bugs in
|
|---|
| 661 | libstdc++, either. Really! Please do not report these as bugs.
|
|---|
| 662 | </p>
|
|---|
| 663 | <p><a name="4_4_Weff"><strong>-Weffc++</strong></a>
|
|---|
| 664 | The biggest of these is the quadzillions of warnings about the
|
|---|
| 665 | library headers emitted when <code>-Weffc++</code> is used. Making
|
|---|
| 666 | libstdc++ "-Weffc++-clean" is not a goal of the project,
|
|---|
| 667 | for a few reasons. Mainly, that option tries to enforce
|
|---|
| 668 | object-oriented programming, while the Standard Library isn't
|
|---|
| 669 | necessarily trying to be OO.
|
|---|
| 670 | </p>
|
|---|
| 671 | <p><a name="4_4_iostreamclear"><strong>reopening a stream fails</strong>
|
|---|
| 672 | </a> Did I just say that -Weffc++ was our biggest false-bug report?
|
|---|
| 673 | I lied. (It used to be.) Today it seems to be reports that after
|
|---|
| 674 | executing a sequence like
|
|---|
| 675 | </p>
|
|---|
| 676 | <pre>
|
|---|
| 677 | #include <fstream>
|
|---|
| 678 | ...
|
|---|
| 679 | std::fstream fs("a_file");
|
|---|
| 680 | // .
|
|---|
| 681 | // . do things with fs...
|
|---|
| 682 | // .
|
|---|
| 683 | fs.close();
|
|---|
| 684 | fs.open("a_new_file");</pre>
|
|---|
| 685 | <p>all operations on the re-opened <code>fs</code> will fail, or at
|
|---|
| 686 | least act very strangely. Yes, they often will, especially if
|
|---|
| 687 | <code>fs</code> reached the EOF state on the previous file. The
|
|---|
| 688 | reason is that the state flags are <strong>not</strong> cleared
|
|---|
| 689 | on a successful call to open(). The standard unfortunately did
|
|---|
| 690 | not specify behavior in this case, and to everybody's great sorrow,
|
|---|
| 691 | the <a href="../ext/howto.html#5">proposed LWG resolution in
|
|---|
| 692 | DR #22</a> is to leave the flags unchanged. You must insert a call
|
|---|
| 693 | to <code>fs.clear()</code> between the calls to close() and open(),
|
|---|
| 694 | and then everything will work like we all expect it to work.
|
|---|
| 695 | </p>
|
|---|
| 696 | <p><a name="4_4_rel_ops"><strong>rel_ops</strong></a>
|
|---|
| 697 | Another is the <code>rel_ops</code> namespace and the template
|
|---|
| 698 | comparison operator functions contained therein. If they become
|
|---|
| 699 | visible in the same namespace as other comparison functions
|
|---|
| 700 | (e.g., '<code>using</code>' them and the <iterator> header),
|
|---|
| 701 | then you will suddenly be faced with huge numbers of ambiguity
|
|---|
| 702 | errors. This was discussed on the -v3 list; Nathan Myers
|
|---|
| 703 | <a href="http://gcc.gnu.org/ml/libstdc++/2001-01/msg00247.html">sums
|
|---|
| 704 | things up here</a>. The collisions with vector/string iterator
|
|---|
| 705 | types have been fixed for 3.1. <!-- more links to email here -->
|
|---|
| 706 | </p>
|
|---|
| 707 | <h3><a name="4_4_interface">The g++-3 headers are <em>not ours</em></a></h3>
|
|---|
| 708 | <p>If you have found an extremely broken header file which is
|
|---|
| 709 | causing problems for you, look carefully before submitting a
|
|---|
| 710 | "high" priority bug report (which you probably shouldn't
|
|---|
| 711 | do anyhow; see the last paragraph of the page describing
|
|---|
| 712 | <a href="http://gcc.gnu.org/gnatswrite.html">the GCC bug database</a>).
|
|---|
| 713 | </p>
|
|---|
| 714 | <p>If the headers are in <code>${prefix}/include/g++-3</code>, or if
|
|---|
| 715 | the installed library's name looks like <code>libstdc++-2.10.a</code>
|
|---|
| 716 | or <code>libstdc++-libc6-2.10.so</code>, then you are using the old
|
|---|
| 717 | libstdc++-v2 library, which is nonstandard and unmaintained. Do not
|
|---|
| 718 | report problems with -v2 to the -v3 mailing list.
|
|---|
| 719 | </p>
|
|---|
| 720 | <p>For GCC versions 3.0 and 3.1 the libstdc++-v3 header files are
|
|---|
| 721 | installed in <code>${prefix}/include/g++-v3</code> (see the 'v'?).
|
|---|
| 722 | Starting with version 3.2 the headers are installed in
|
|---|
| 723 | <code>${prefix}/include/c++/${version}</code> as this prevents
|
|---|
| 724 | headers from previous versions being found by mistake.
|
|---|
| 725 | </p>
|
|---|
| 726 | <p><a name="4_4_glibc"><strong>glibc</strong></a>
|
|---|
| 727 | If you're on a GNU/Linux system and have just upgraded to
|
|---|
| 728 | glibc 2.2, but are still using gcc 2.95.2, then you should have
|
|---|
| 729 | read the glibc FAQ, specifically 2.34:
|
|---|
| 730 | </p>
|
|---|
| 731 | <pre>
|
|---|
| 732 | 2.34. When compiling C++ programs, I get a compilation error in streambuf.h.
|
|---|
| 733 |
|
|---|
| 734 | {BH} You are using g++ 2.95.2? After upgrading to glibc 2.2, you need to
|
|---|
| 735 | apply a patch to the include files in /usr/include/g++, because the fpos_t
|
|---|
| 736 | type has changed in glibc 2.2. The patch is at
|
|---|
| 737 | http://clisp.cons.org/~haible/gccinclude-glibc-2.2-compat.diff
|
|---|
| 738 | </pre>
|
|---|
| 739 | <p>Note that 2.95.x shipped with the
|
|---|
| 740 | <a href="#4_4_interface">old v2 library</a> which is no longer
|
|---|
| 741 | maintained. Also note that gcc 2.95.3 fixes this problem, but
|
|---|
| 742 | requires a separate patch for libstdc++-v3.
|
|---|
| 743 | </p>
|
|---|
| 744 | <p><a name="4_4_checks"><strong>concept checks</strong></a>
|
|---|
| 745 | If you see compilation errors containing messages about
|
|---|
| 746 | <code> <em>foo</em>Concept </code>and a<code> constraints </code>
|
|---|
| 747 | member function, then most likely you have violated one of the
|
|---|
| 748 | requirements for types used during instantiation of template
|
|---|
| 749 | containers and functions. For example, EqualityComparableConcept
|
|---|
| 750 | appears if your types must be comparable with == and you have not
|
|---|
| 751 | provided this capability (a typo, or wrong visibility, or you
|
|---|
| 752 | just plain forgot, etc).
|
|---|
| 753 | </p>
|
|---|
| 754 | <p>More information, including how to optionally enable/disable the
|
|---|
| 755 | checks, is available
|
|---|
| 756 | <a href="../19_diagnostics/howto.html#3">here</a>.
|
|---|
| 757 | </p>
|
|---|
| 758 | <p><a name="4_4_dlsym"><strong>dlopen/dlsym</strong></a>
|
|---|
| 759 | If you are using the C++ library across dynamically-loaded
|
|---|
| 760 | objects, make certain that you are passing the correct options
|
|---|
| 761 | when compiling and linking:
|
|---|
| 762 | </p>
|
|---|
| 763 | <pre>
|
|---|
| 764 | // compile your library components
|
|---|
| 765 | g++ -fPIC -c a.cc
|
|---|
| 766 | g++ -fPIC -c b.cc
|
|---|
| 767 | ...
|
|---|
| 768 | g++ -fPIC -c z.cc
|
|---|
| 769 |
|
|---|
| 770 | // create your library
|
|---|
| 771 | g++ -fPIC -shared -rdynamic -o libfoo.so a.o b.o ... z.o
|
|---|
| 772 |
|
|---|
| 773 | // link the executable
|
|---|
| 774 | g++ -fPIC -rdynamic -o foo ... -L. -lfoo -ldl</pre>
|
|---|
| 775 | <p><a name="4_4_leak"><strong>"memory leaks" in containers</strong></a>
|
|---|
| 776 | A few people have reported that the standard containers appear
|
|---|
| 777 | to leak memory when tested with memory checkers such as
|
|---|
| 778 | <a href="http://developer.kde.org/~sewardj/">valgrind</a>.
|
|---|
| 779 | The library's default allocators keep free memory in a pool
|
|---|
| 780 | for later reuse, rather than returning it to the OS. Although
|
|---|
| 781 | this memory is always reachable by the library and is never
|
|---|
| 782 | lost, memory debugging tools can report it as a leak. If you
|
|---|
| 783 | want to test the library for memory leaks please read
|
|---|
| 784 | <a href="../debug.html#mem">Tips for memory leak hunting</a>
|
|---|
| 785 | first.
|
|---|
| 786 | </p>
|
|---|
| 787 |
|
|---|
| 788 | <hr />
|
|---|
| 789 | <h2><a name="4_5">4.5 Aw, that's easy to fix!</a></h2>
|
|---|
| 790 | <p>If you have found a bug in the library and you think you have
|
|---|
| 791 | a working fix, then send it in! The main GCC site has a page
|
|---|
| 792 | on <a href="http://gcc.gnu.org/contribute.html">submitting
|
|---|
| 793 | patches</a> that covers the procedure, but for libstdc++ you
|
|---|
| 794 | should also send the patch to our mailing list in addition to
|
|---|
| 795 | the GCC patches mailing list. The libstdc++
|
|---|
| 796 | <a href="../17_intro/contribute.html">contributors' page</a>
|
|---|
| 797 | also talks about how to submit patches.
|
|---|
| 798 | </p>
|
|---|
| 799 | <p>In addition to the description, the patch, and the ChangeLog
|
|---|
| 800 | entry, it is a Good Thing if you can additionally create a small
|
|---|
| 801 | test program to test for the presence of the bug that your
|
|---|
| 802 | patch fixes. Bugs have a way of being reintroduced; if an old
|
|---|
| 803 | bug creeps back in, it will be caught immediately by the
|
|---|
| 804 | <a href="#2_4">testsuite</a> -- but only if such a test exists.
|
|---|
| 805 | </p>
|
|---|
| 806 |
|
|---|
| 807 | <hr />
|
|---|
| 808 | <h1><a name="5_0">5.0 Miscellaneous</a></h1>
|
|---|
| 809 | <h2><a name="5_1">5.1 string::iterator is not char*;
|
|---|
| 810 | vector<T>::iterator is not T*</a></h2>
|
|---|
| 811 | <p>If you have code that depends on container<T> iterators
|
|---|
| 812 | being implemented as pointer-to-T, your code is broken.
|
|---|
| 813 | </p>
|
|---|
| 814 | <p>While there are arguments for iterators to be implemented in
|
|---|
| 815 | that manner, A) they aren't very good ones in the long term,
|
|---|
| 816 | and B) they were never guaranteed by the Standard anyway. The
|
|---|
| 817 | type-safety achieved by making iterators a real class rather
|
|---|
| 818 | than a typedef for <code>T*</code> outweighs nearly all opposing
|
|---|
| 819 | arguments.
|
|---|
| 820 | </p>
|
|---|
| 821 | <p>Code which does assume that a vector iterator <code> i </code>
|
|---|
| 822 | is a pointer can often be fixed by changing <code> i </code> in
|
|---|
| 823 | certain expressions to <code> &*i </code>. Future revisions
|
|---|
| 824 | of the Standard are expected to bless this usage for
|
|---|
| 825 | vector<> (but not for basic_string<>).
|
|---|
| 826 | </p>
|
|---|
| 827 |
|
|---|
| 828 | <hr />
|
|---|
| 829 | <h2><a name="5_2">5.2 What's next after libstdc++-v3?</a></h2>
|
|---|
| 830 | <p>Hopefully, not much. The goal of libstdc++-v3 is to produce
|
|---|
| 831 | a fully-compliant, fully-portable Standard Library. After that,
|
|---|
| 832 | we're mostly done: there won't <em>be</em> any more compliance
|
|---|
| 833 | work to do. However:
|
|---|
| 834 | </p>
|
|---|
| 835 | <ol>
|
|---|
| 836 | <li><p>The ISO Committee will meet periodically to review Defect Reports
|
|---|
| 837 | in the C++ Standard. Undoubtedly some of these will result in
|
|---|
| 838 | changes to the Standard, which will be reflected in patches to
|
|---|
| 839 | libstdc++. Some of that is already happening, see 4.2. Some of
|
|---|
| 840 | those changes are being predicted by the library maintainers, and
|
|---|
| 841 | we add code to the library based on what the current proposed
|
|---|
| 842 | resolution specifies. Those additions are listed in
|
|---|
| 843 | <a href="../ext/howto.html#5">the extensions page</a>.
|
|---|
| 844 | </p></li>
|
|---|
| 845 | <li><p>Performance tuning. Lots of performance tuning. This too is
|
|---|
| 846 | already underway for post-3.0 releases, starting with memory
|
|---|
| 847 | expansion in container classes and buffer usage in synchronized
|
|---|
| 848 | stream objects.
|
|---|
| 849 | </p></li>
|
|---|
| 850 | <li><p>An ABI for libstdc++ is being developed, so that
|
|---|
| 851 | multiple binary-incompatible copies of the library can be replaced
|
|---|
| 852 | with a single backwards-compatible library, like libgcc_s.so is.
|
|---|
| 853 | </p></li>
|
|---|
| 854 | <li><p>The current libstdc++ contains extensions to the Library which
|
|---|
| 855 | must be explicitly requested by client code (for example, the
|
|---|
| 856 | hash tables from SGI). Other extensions may be added to
|
|---|
| 857 | libstdc++-v3 if they seem to be "standard" enough.
|
|---|
| 858 | (For example, the "long long" type from C99.)
|
|---|
| 859 | Bugfixes and rewrites (to improve or fix thread safety, for
|
|---|
| 860 | instance) will of course be a continuing task.
|
|---|
| 861 | </p></li>
|
|---|
| 862 | </ol>
|
|---|
| 863 | <p><a href="http://gcc.gnu.org/ml/libstdc++/1999/msg00080.html">This
|
|---|
| 864 | question</a> about the next libstdc++ prompted some brief but
|
|---|
| 865 | interesting
|
|---|
| 866 | <a href="http://gcc.gnu.org/ml/libstdc++/1999/msg00084.html">speculation</a>.
|
|---|
| 867 | </p>
|
|---|
| 868 |
|
|---|
| 869 | <hr />
|
|---|
| 870 | <h2><a name="5_3">5.3 What about the STL from SGI?</a></h2>
|
|---|
| 871 | <p>The <a href="http://www.sgi.com/Technology/STL/">STL from SGI</a>,
|
|---|
| 872 | version 3.3, was the most recent merge of the STL codebase. The
|
|---|
| 873 | code in libstdc++ contains many fixes and changes, and it is
|
|---|
| 874 | very likely that the SGI code is no longer under active
|
|---|
| 875 | development. We expect that no future merges will take place.
|
|---|
| 876 | </p>
|
|---|
| 877 | <p>In particular, <code>string</code> is not from SGI and makes no
|
|---|
| 878 | use of their "rope" class (which is included as an
|
|---|
| 879 | optional extension), nor is <code>valarray</code> and some others.
|
|---|
| 880 | Classes like <code>vector<></code> are, however we have
|
|---|
| 881 | made significant changes to them since then.
|
|---|
| 882 | </p>
|
|---|
| 883 | <p>The FAQ for SGI's STL (one jump off of their main page) is
|
|---|
| 884 | recommended reading.
|
|---|
| 885 | </p>
|
|---|
| 886 |
|
|---|
| 887 | <hr />
|
|---|
| 888 | <h2><a name="5_4">5.4 Extensions and Backward Compatibility</a></h2>
|
|---|
| 889 | <p>Headers in the <code>ext</code> and <code>backward</code>
|
|---|
| 890 | subdirectories should be referred to by their relative paths:
|
|---|
| 891 | <!-- Careful, the leading spaces in PRE show up directly. -->
|
|---|
| 892 | </p>
|
|---|
| 893 | <pre>
|
|---|
| 894 | #include <ext/hash_map> </pre>
|
|---|
| 895 | <p>rather than using <code>-I</code> or other options. This is more
|
|---|
| 896 | portable and forward-compatible. (The situation is the same as
|
|---|
| 897 | that of other headers whose directories are not searched directly,
|
|---|
| 898 | e.g., <code><sys/stat.h></code>, <code><X11/Xlib.h></code>.
|
|---|
| 899 | </p>
|
|---|
| 900 |
|
|---|
| 901 | <p>The extensions are no longer in the global or <code>std</code>
|
|---|
| 902 | namespaces, instead they are declared in the <code>__gnu_cxx</code>
|
|---|
| 903 | namespace. For maximum portability, consider defining a namespace
|
|---|
| 904 | alias to use to talk about extensions, e.g.:
|
|---|
| 905 | </p>
|
|---|
| 906 | <pre>
|
|---|
| 907 | #ifdef __GNUC__
|
|---|
| 908 | #if __GNUC__ < 3
|
|---|
| 909 | #include <hash_map.h>
|
|---|
| 910 | namespace Sgi { using ::hash_map; }; // inherit globals
|
|---|
| 911 | #else
|
|---|
| 912 | #include <ext/hash_map>
|
|---|
| 913 | #if __GNUC_MINOR__ == 0
|
|---|
| 914 | namespace Sgi = std; // GCC 3.0
|
|---|
| 915 | #else
|
|---|
| 916 | namespace Sgi = ::__gnu_cxx; // GCC 3.1 and later
|
|---|
| 917 | #endif
|
|---|
| 918 | #endif
|
|---|
| 919 | #else // ... there are other compilers, right?
|
|---|
| 920 | namespace Sgi = std;
|
|---|
| 921 | #endif
|
|---|
| 922 |
|
|---|
| 923 | Sgi::hash_map<int,int> my_map; </pre>
|
|---|
| 924 | <p>This is a bit cleaner than defining typedefs for all the
|
|---|
| 925 | instantiations you might need.
|
|---|
| 926 | </p>
|
|---|
| 927 | <p>Extensions to the library have
|
|---|
| 928 | <a href="../ext/howto.html">their own page</a>.
|
|---|
| 929 | </p>
|
|---|
| 930 |
|
|---|
| 931 | <hr />
|
|---|
| 932 | <h2><a name="5_5">5.5 [removed]</a></h2>
|
|---|
| 933 | <p>This question has become moot and has been removed. The stub
|
|---|
| 934 | is here to preserve numbering (and hence links/bookmarks).
|
|---|
| 935 | </p>
|
|---|
| 936 |
|
|---|
| 937 | <hr />
|
|---|
| 938 | <h2><a name="5_6">5.6 Is libstdc++-v3 thread-safe?</a></h2>
|
|---|
| 939 | <p>libstdc++-v3 strives to be thread-safe when all of the following
|
|---|
| 940 | conditions are met:
|
|---|
| 941 | </p>
|
|---|
| 942 | <ul>
|
|---|
| 943 | <li>The system's libc is itself thread-safe,</li>
|
|---|
| 944 | <li><code>gcc -v</code> reports a thread model other than 'single',</li>
|
|---|
| 945 | <li>[pre-3.3 only] a non-generic implementation of atomicity.h
|
|---|
| 946 | exists for the architecture in question.</li>
|
|---|
| 947 | </ul>
|
|---|
| 948 | <p>The user-code must guard against concurrent method calls which may
|
|---|
| 949 | access any particular library object's state. Typically, the
|
|---|
| 950 | application programmer may infer what object locks must be held
|
|---|
| 951 | based on the objects referenced in a method call. Without getting
|
|---|
| 952 | into great detail, here is an example which requires user-level
|
|---|
| 953 | locks:
|
|---|
| 954 | </p>
|
|---|
| 955 | <pre>
|
|---|
| 956 | library_class_a shared_object_a;
|
|---|
| 957 |
|
|---|
| 958 | thread_main () {
|
|---|
| 959 | library_class_b *object_b = new library_class_b;
|
|---|
| 960 | shared_object_a.add_b (object_b); // must hold lock for shared_object_a
|
|---|
| 961 | shared_object_a.mutate (); // must hold lock for shared_object_a
|
|---|
| 962 | }
|
|---|
| 963 |
|
|---|
| 964 | // Multiple copies of thread_main() are started in independent threads.</pre>
|
|---|
| 965 | <p>Under the assumption that object_a and object_b are never exposed to
|
|---|
| 966 | another thread, here is an example that should not require any
|
|---|
| 967 | user-level locks:
|
|---|
| 968 | </p>
|
|---|
| 969 | <pre>
|
|---|
| 970 | thread_main () {
|
|---|
| 971 | library_class_a object_a;
|
|---|
| 972 | library_class_b *object_b = new library_class_b;
|
|---|
| 973 | object_a.add_b (object_b);
|
|---|
| 974 | object_a.mutate ();
|
|---|
| 975 | } </pre>
|
|---|
| 976 | <p>All library objects are safe to use in a multithreaded program as
|
|---|
| 977 | long as each thread carefully locks out access by any other
|
|---|
| 978 | thread while it uses any object visible to another thread, i.e.,
|
|---|
| 979 | treat library objects like any other shared resource. In general,
|
|---|
| 980 | this requirement includes both read and write access to objects;
|
|---|
| 981 | unless otherwise documented as safe, do not assume that two threads
|
|---|
| 982 | may access a shared standard library object at the same time.
|
|---|
| 983 | </p>
|
|---|
| 984 | <p>See chapters <a href="../17_intro/howto.html#3">17</a> (library
|
|---|
| 985 | introduction), <a href="../23_containers/howto.html#3">23</a>
|
|---|
| 986 | (containers), and <a href="../27_io/howto.html#9">27</a> (I/O) for
|
|---|
| 987 | more information.
|
|---|
| 988 | </p>
|
|---|
| 989 |
|
|---|
| 990 | <hr />
|
|---|
| 991 | <h2><a name="5_7">5.7 How do I get a copy of the ISO C++ Standard?</a></h2>
|
|---|
| 992 | <p>Copies of the full ISO 14882 standard are available on line via the
|
|---|
| 993 | ISO mirror site for committee members. Non-members, or those who
|
|---|
| 994 | have not paid for the privilege of sitting on the committee and
|
|---|
| 995 | sustained their two-meeting commitment for voting rights, may get a
|
|---|
| 996 | copy of the standard from their respective national standards
|
|---|
| 997 | organization. In the USA, this national standards organization is
|
|---|
| 998 | ANSI and their website is right <a href="http://www.ansi.org">here</a>.
|
|---|
| 999 | (And if you've already registered with them, clicking this link will
|
|---|
| 1000 | take you to directly to the place where you can
|
|---|
| 1001 | <a href="http://webstore.ansi.org/ansidocstore/product.asp?sku=ISO%2FIEC+14882%2D1998">buy
|
|---|
| 1002 | the standard on-line</a>.
|
|---|
| 1003 | </p>
|
|---|
| 1004 | <p>Who is your country's member body? Visit the
|
|---|
| 1005 | <a href="http://www.iso.ch/">ISO homepage</a> and find out!
|
|---|
| 1006 | </p>
|
|---|
| 1007 |
|
|---|
| 1008 | <hr />
|
|---|
| 1009 | <h2><a name="5_8">5.8 What's an ABI and why is it so messy?</a></h2>
|
|---|
| 1010 | <p>"ABI" stands for "Application Binary Interface."
|
|---|
| 1011 | Conventionally, it refers to a great mass of details about how
|
|---|
| 1012 | arguments are arranged on the call stack and/or in registers, and
|
|---|
| 1013 | how various types are arranged and padded in structs. A single CPU
|
|---|
| 1014 | design may suffer multiple ABIs designed by different development
|
|---|
| 1015 | tool vendors who made different choices, or even by the same vendor
|
|---|
| 1016 | for different target applications or compiler versions. In ideal
|
|---|
| 1017 | circumstances the CPU designer presents one ABI and all the OSes and
|
|---|
| 1018 | compilers use it. In practice every ABI omits details that compiler
|
|---|
| 1019 | implementers (consciously or accidentally) must choose for themselves.
|
|---|
| 1020 | </p>
|
|---|
| 1021 | <p>That ABI definition suffices for compilers to generate code so a
|
|---|
| 1022 | program can interact safely with an OS and its lowest-level libraries.
|
|---|
| 1023 | Users usually want an ABI to encompass more detail, allowing libraries
|
|---|
| 1024 | built with different compilers (or different releases of the same
|
|---|
| 1025 | compiler!) to be linked together. For C++, this includes many more
|
|---|
| 1026 | details than for C, and CPU designers (for good reasons elaborated
|
|---|
| 1027 | below) have not stepped up to publish C++ ABIs. The details include
|
|---|
| 1028 | virtual function implementation, struct inheritance layout, name
|
|---|
| 1029 | mangling, and exception handling. Such an ABI has been defined for
|
|---|
| 1030 | GNU C++, and is immediately useful for embedded work relying only on
|
|---|
| 1031 | a "free-standing implementation" that doesn't include (much
|
|---|
| 1032 | of) the standard library. It is a good basis for the work to come.
|
|---|
| 1033 | </p>
|
|---|
| 1034 | <p>A useful C++ ABI must also incorporate many details of the standard
|
|---|
| 1035 | library implementation. For a C ABI, the layouts of a few structs
|
|---|
| 1036 | (such as FILE, stat, jmpbuf, and the like) and a few macros suffice.
|
|---|
| 1037 | For C++, the details include the complete set of names of functions
|
|---|
| 1038 | and types used, the offsets of class members and virtual functions,
|
|---|
| 1039 | and the actual definitions of all inlines. C++ exposes many more
|
|---|
| 1040 | library details to the caller than C does. It makes defining
|
|---|
| 1041 | a complete ABI a much bigger undertaking, and requires not just
|
|---|
| 1042 | documenting library implementation details, but carefully designing
|
|---|
| 1043 | those details so that future bug fixes and optimizations don't
|
|---|
| 1044 | force breaking the ABI.
|
|---|
| 1045 | </p>
|
|---|
| 1046 | <p>There are ways to help isolate library implementation details from the
|
|---|
| 1047 | ABI, but they trade off against speed. Library details used in
|
|---|
| 1048 | inner loops (e.g., getchar) must be exposed and frozen for all
|
|---|
| 1049 | time, but many others may reasonably be kept hidden from user code,
|
|---|
| 1050 | so they may later be changed. Deciding which, and implementing
|
|---|
| 1051 | the decisions, must happen before you can reasonably document a
|
|---|
| 1052 | candidate C++ ABI that encompasses the standard library.
|
|---|
| 1053 | </p>
|
|---|
| 1054 |
|
|---|
| 1055 | <!-- ####################################################### -->
|
|---|
| 1056 |
|
|---|
| 1057 | <hr />
|
|---|
| 1058 | <p class="fineprint"><em>
|
|---|
| 1059 | See <a href="../17_intro/license.html">license.html</a> for copying conditions.
|
|---|
| 1060 | Comments and suggestions are welcome, and may be sent to
|
|---|
| 1061 | <a href="mailto:[email protected]">the libstdc++ mailing list</a>.
|
|---|
| 1062 | </em></p>
|
|---|
| 1063 |
|
|---|
| 1064 |
|
|---|
| 1065 | </body>
|
|---|
| 1066 | </html>
|
|---|
| 1067 |
|
|---|