<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Frequently Asked Questions</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="index.html" title="The GNU C++ Library" /><link rel="up" href="bk03.html" title="" /><link rel="prev" href="bk03.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Frequently Asked Questions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk03.html">Prev</a> </td><th width="60%" align="center"></th><td width="20%" align="right"> </td></tr></table><hr /></div><div class="article"><div class="titlepage"><div><div><h1 class="title"><a id="faq"></a>Frequently Asked Questions</h1></div><div><p class="copyright">Copyright © 
      2008-2023
     
      <a class="link" href="https://www.fsf.org" target="_top">FSF</a>
    </p></div></div><hr /></div><div class="qandaset"><a id="faq.faq"></a><dl><dt></dt><dd><dl><dt>1.1. <a href="faq.html#faq.what">
      What is libstdc++?
    </a></dt><dt>1.2. <a href="faq.html#faq.why">
      Why should I use libstdc++?
    </a></dt><dt>1.3. <a href="faq.html#faq.who">
      Who's in charge of it?
    </a></dt><dt>1.4. <a href="faq.html#faq.when">
      When is libstdc++ going to be finished?
    </a></dt><dt>1.5. <a href="faq.html#faq.how">
      How do I contribute to the effort?
    </a></dt><dt>1.6. <a href="faq.html#faq.whereis_old">
      What happened to the older libg++? I need that!
    </a></dt><dt>1.7. <a href="faq.html#faq.more_questions">
      What if I have more questions?
    </a></dt></dl></dd><dt></dt><dd><dl><dt>2.1. <a href="faq.html#faq.license.what">
      What are the license terms for libstdc++?
    </a></dt><dt>2.2. <a href="faq.html#faq.license.any_program">
      So any program which uses libstdc++ falls under the GPL?
    </a></dt><dt>2.3. <a href="faq.html#faq.license.lgpl">
      How is that different from the GNU {Lesser,Library} GPL?
    </a></dt><dt>2.4. <a href="faq.html#faq.license.what_restrictions">
      I see. So, what restrictions are there on programs that use the library?
    </a></dt></dl></dd><dt></dt><dd><dl><dt>3.1. <a href="faq.html#faq.how_to_install">How do I install libstdc++?
    </a></dt><dt>3.2. <a href="faq.html#faq.how_to_get_sources">How does one get current libstdc++ sources?
    </a></dt><dt>3.3. <a href="faq.html#faq.how_to_test">How do I know if it works?
    </a></dt><dt>3.4. <a href="faq.html#faq.how_to_set_paths">How do I insure that the dynamically linked library will be found?
    </a></dt><dt>3.5. <a href="faq.html#faq.what_is_libsupcxx">
      What's libsupc++?
    </a></dt><dt>3.6. <a href="faq.html#faq.size">
      This library is HUGE!
    </a></dt></dl></dd><dt></dt><dd><dl><dt>4.1. <a href="faq.html#faq.other_compilers">
      Can libstdc++ be used with non-GNU compilers?
    </a></dt><dt>4.2. <a href="faq.html#faq.solaris_long_long">
      No 'long long' type on Solaris?
    </a></dt><dt>4.3. <a href="faq.html#faq.predefined">
      _XOPEN_SOURCE and _GNU_SOURCE are always defined?
    </a></dt><dt>4.4. <a href="faq.html#faq.darwin_ctype">
      Mac OS X ctype.h is broken! How can I fix it?
    </a></dt><dt>4.5. <a href="faq.html#faq.threads_i386">
      Threading is broken on i386?
    </a></dt><dt>4.6. <a href="faq.html#faq.atomic_mips">
      MIPS atomic operations
    </a></dt><dt>4.7. <a href="faq.html#faq.linux_glibc">
      Recent GNU/Linux glibc required?
    </a></dt><dt>4.8. <a href="faq.html#faq.freebsd_wchar">
      Can't use wchar_t/wstring on FreeBSD
    </a></dt></dl></dd><dt></dt><dd><dl><dt>5.1. <a href="faq.html#faq.what_works">
      What works already?
    </a></dt><dt>5.2. <a href="faq.html#faq.standard_bugs">
      Bugs in the ISO C++ language or library specification
    </a></dt><dt>5.3. <a href="faq.html#faq.compiler_bugs">
      Bugs in the compiler (gcc/g++) and not libstdc++
    </a></dt></dl></dd><dt></dt><dd><dl><dt>6.1. <a href="faq.html#faq.stream_reopening_fails">
      Reopening a stream fails
    </a></dt><dt>6.2. <a href="faq.html#faq.wefcxx_verbose">
      -Weffc++ complains too much
    </a></dt><dt>6.3. <a href="faq.html#faq.ambiguous_overloads">
      Ambiguous overloads after including an old-style header
    </a></dt><dt>6.4. <a href="faq.html#faq.v2_headers">
      The g++-3 headers are not ours
    </a></dt><dt>6.5. <a href="faq.html#faq.boost_concept_checks">
      Errors about *Concept and
      constraints in the STL
    </a></dt><dt>6.6. <a href="faq.html#faq.dlopen_crash">
      Program crashes when using library code in a
      dynamically-loaded library
    </a></dt><dt>6.7. <a href="faq.html#faq.memory_leaks">
      “Memory leaks” in libstdc++
    </a></dt><dt>6.8. <a href="faq.html#faq.list_size_on">
      list::size() is O(n)!
    </a></dt><dt>6.9. <a href="faq.html#faq.easy_to_fix">
      Aw, that's easy to fix!
    </a></dt></dl></dd><dt></dt><dd><dl><dt>7.1. <a href="faq.html#faq.iterator_as_pod">
      string::iterator is not char*;
      vector&lt;T&gt;::iterator is not T*
    </a></dt><dt>7.2. <a href="faq.html#faq.what_is_next">
      What's next after libstdc++?
    </a></dt><dt>7.3. <a href="faq.html#faq.sgi_stl">
      What about the STL from SGI?
    </a></dt><dt>7.4. <a href="faq.html#faq.extensions_and_backwards_compat">
      Extensions and Backward Compatibility
    </a></dt><dt>7.5. <a href="faq.html#faq.tr1_support">
      Does libstdc++ support TR1?
    </a></dt><dt>7.6. <a href="faq.html#faq.get_iso_cxx">How do I get a copy of the ISO C++ Standard?
    </a></dt><dt>7.7. <a href="faq.html#faq.what_is_abi">
      What's an ABI and why is it so messy?
    </a></dt><dt>7.8. <a href="faq.html#faq.size_equals_capacity">
      How do I make std::vector&lt;T&gt;::capacity() == std::vector&lt;T&gt;::size?
    </a></dt></dl></dd></dl><table border="0" style="width: 100%;"><colgroup><col align="left" width="1%" /><col /></colgroup><tbody><tr class="toc"><td align="left" valign="top" colspan="2"><dl><dt>1.1. <a href="faq.html#faq.what">
      What is libstdc++?
    </a></dt><dt>1.2. <a href="faq.html#faq.why">
      Why should I use libstdc++?
    </a></dt><dt>1.3. <a href="faq.html#faq.who">
      Who's in charge of it?
    </a></dt><dt>1.4. <a href="faq.html#faq.when">
      When is libstdc++ going to be finished?
    </a></dt><dt>1.5. <a href="faq.html#faq.how">
      How do I contribute to the effort?
    </a></dt><dt>1.6. <a href="faq.html#faq.whereis_old">
      What happened to the older libg++? I need that!
    </a></dt><dt>1.7. <a href="faq.html#faq.more_questions">
      What if I have more questions?
    </a></dt></dl></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.what"></a><a id="faq.what.q"></a><p><strong>1.1.</strong></p></td><td align="left" valign="top"><p>
      What is libstdc++?
    </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="faq.what.a"></a></td><td align="left" valign="top"><p>
     The GNU Standard C++ Library v3 is an ongoing project to
     implement the ISO 14882 C++ Standard Library as described in
     clauses 20 through 33 and annex D (prior to the 2017 standard
     the library clauses started with 17).  For those who want to see
     exactly how far the project has come, or just want the latest
     bleeding-edge code, the up-to-date source can be cloned via
     <a class="link" href="https://gcc.gnu.org/git.html" target="_top">Git</a>.
    </p><p>
    N.B. The library is called libstdc++ <span class="emphasis"><em>not</em></span> stdlibc++.
    </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.why"></a><a id="q-why"></a><p><strong>1.2.</strong></p></td><td align="left" valign="top"><p>
      Why should I use libstdc++?
    </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-why"></a></td><td align="left" valign="top"><p>
    The completion of the initial ISO C++ standardization effort gave the C++
    community a powerful set of reuseable tools in the form of the C++
    Standard Library.  However, for several years C++ implementations were
    (as the Draft Standard used to say) <span class="quote">“<span class="quote">incomplet and
    incorrekt</span>”</span>, and many suffered from limitations of the compilers
    that used them.
    </p><p>
    The GNU compiler collection
    (<span class="command"><strong>gcc</strong></span>, <span class="command"><strong>g++</strong></span>, etc) is widely
    considered to be one of the leading compilers in the world.  Its
    development is overseen by the
    <a class="link" href="https://gcc.gnu.org/" target="_top">GCC team</a>.
    All of the rapid development and near-legendary portability
    that are the hallmarks of an open-source project are applied to libstdc++.
    </p><p>
    All of the standard classes and functions from C++98/C++03, C++11 and C++14
    (such as <code class="classname">string</code>,
    <code class="classname">vector&lt;&gt;</code>, iostreams, algorithms etc.)
    are freely available and attempt to be fully compliant.
    Work is ongoing to complete support for the current revision of the
    ISO C++ Standard.
    </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.who"></a><a id="q-who"></a><p><strong>1.3.</strong></p></td><td align="left" valign="top"><p>
      Who's in charge of it?
    </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-who"></a></td><td align="left" valign="top"><p>
     The libstdc++ project is contributed to by several developers
     all over the world, in the same way as GCC or the Linux kernel.
     The current maintainers are listed in the
     <a class="link" href="https://gcc.gnu.org/cgit/gcc/tree/MAINTAINERS" target="_top"><code class="filename">MAINTAINERS</code></a>
     file (look for "c++ runtime libs").
    </p><p>
    Development and discussion is held on the libstdc++ mailing
    list.  Subscribing to the list, or searching the list
    archives, is open to everyone.  You can read instructions for
    doing so on the <a class="link" href="https://gcc.gnu.org/lists.html" target="_top">GCC mailing lists</a> page.
    If you have questions, ideas, code, or are just curious, sign up!
    </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.when"></a><a id="q-when"></a><p><strong>1.4.</strong></p></td><td align="left" valign="top"><p>
      When is libstdc++ going to be finished?
    </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-when"></a></td><td align="left" valign="top"><p>
    Nathan Myers gave the best of all possible answers, responding to
    a Usenet article asking this question: <span class="emphasis"><em>Sooner, if you
    help.</em></span>
    </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.how"></a><a id="q-how"></a><p><strong>1.5.</strong></p></td><td align="left" valign="top"><p>
      How do I contribute to the effort?
    </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-how"></a></td><td align="left" valign="top"><p>
    See the <a class="link" href="manual/appendix_contributing.html" title="Appendix A.  Contributing">Contributing</a> section in
    the manual. Subscribing to the mailing 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. 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 bug in code that we all thought was working and is
    willing to provide details, is more than welcome!
    </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.whereis_old"></a><a id="q-whereis_old"></a><p><strong>1.6.</strong></p></td><td align="left" valign="top"><p>
      What happened to the older libg++? I need that!
    </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-whereis_old"></a></td><td align="left" valign="top"><p>
    The last libg++ README states
    <span class="quote">“<span class="quote">This package is considered obsolete and is no longer
    being developed.</span>”</span>
    It should not be used for new projects, and won't even compile with
    recent releases of GCC (or most other C++ compilers).
    </p><p>
    More information can be found in the
    <a class="link" href="manual/backwards.html" title="Backwards Compatibility">Backwards
    Compatibility</a> section of the libstdc++ manual.
    </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.more_questions"></a><a id="q-more_questions"></a><p><strong>1.7.</strong></p></td><td align="left" valign="top"><p>
      What if I have more questions?
    </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-more_questions"></a></td><td align="left" valign="top"><p>
    If you have read the documentation, and your question 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
    information is available on the homepage (including how to browse
    the list archives); to send a message to the list,
    use <code class="email">&lt;<a class="email" href="mailto:libstdc++@gcc.gnu.org">libstdc++@gcc.gnu.org</a>&gt;</code>.
    </p><p>
    If you have a question that you think should be included
    here, or if you have a question <span class="emphasis"><em>about</em></span> a question/answer
    here, please send email to the libstdc++ mailing list, as above.
    </p></td></tr><tr class="toc"><td align="left" valign="top" colspan="2"><dl><dt>2.1. <a href="faq.html#faq.license.what">
      What are the license terms for libstdc++?
    </a></dt><dt>2.2. <a href="faq.html#faq.license.any_program">
      So any program which uses libstdc++ falls under the GPL?
    </a></dt><dt>2.3. <a href="faq.html#faq.license.lgpl">
      How is that different from the GNU {Lesser,Library} GPL?
    </a></dt><dt>2.4. <a href="faq.html#faq.license.what_restrictions">
      I see. So, what restrictions are there on programs that use the library?
    </a></dt></dl></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.license.what"></a><a id="q-license.what"></a><p><strong>2.1.</strong></p></td><td align="left" valign="top"><p>
      What are the license terms for libstdc++?
    </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-license.what"></a></td><td align="left" valign="top"><p>
    See <a class="link" href="manual/license.html" title="License">our license description</a>
    for these and related questions.
    </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.license.any_program"></a><a id="q-license.any_program"></a><p><strong>2.2.</strong></p></td><td align="left" valign="top"><p>
      So any program which uses libstdc++ falls under the GPL?
    </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-license.any_program"></a></td><td align="left" valign="top"><p>
     No. The special exception permits use of the library in
     proprietary applications.
    </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.license.lgpl"></a><a id="q-license.lgpl"></a><p><strong>2.3.</strong></p></td><td align="left" valign="top"><p>
      How is that different from the GNU {Lesser,Library} GPL?
    </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-license.lgpl"></a></td><td align="left" valign="top"><p>
      The LGPL requires that users be able to replace the LGPL code with a
     modified version; this is trivial if the library in question is a C
     shared library.  But there's no way to make that work with C++, where
     much of the library consists of inline functions and templates, which
     are expanded inside the code that uses the library.  So to allow people
     to replace the library code, someone using the library would have to
     distribute their own source, rendering the LGPL equivalent to the GPL.
    </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.license.what_restrictions"></a><a id="q-license.what_restrictions"></a><p><strong>2.4.</strong></p></td><td align="left" valign="top"><p>
      I see. So, what restrictions are there on programs that use the library?
    </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-license.what_restrictions"></a></td><td align="left" valign="top"><p>
      None.  We encourage such programs to be released as free software,
     but we won't punish you or sue you if you choose otherwise.
    </p></td></tr><tr class="toc"><td align="left" valign="top" colspan="2"><dl><dt>3.1. <a href="faq.html#faq.how_to_install">How do I install libstdc++?
    </a></dt><dt>3.2. <a href="faq.html#faq.how_to_get_sources">How does one get current libstdc++ sources?
    </a></dt><dt>3.3. <a href="faq.html#faq.how_to_test">How do I know if it works?
    </a></dt><dt>3.4. <a href="faq.html#faq.how_to_set_paths">How do I insure that the dynamically linked library will be found?
    </a></dt><dt>3.5. <a href="faq.html#faq.what_is_libsupcxx">
      What's libsupc++?
    </a></dt><dt>3.6. <a href="faq.html#faq.size">
      This library is HUGE!
    </a></dt></dl></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.how_to_install"></a><a id="q-how_to_install"></a><p><strong>3.1.</strong></p></td><td align="left" valign="top"><p>How do I install libstdc++?
    </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-how_to_install"></a></td><td align="left" valign="top"><p>
    Often libstdc++ comes pre-installed as an integral part of many
    existing GNU/Linux and Unix systems, as well as many embedded
    development tools. It may be necessary to install extra
    development packages to get the headers, or the documentation, or
    the source: please consult your vendor for details.
    </p><p>
    To build and install from the GNU GCC sources, please consult the
    <a class="link" href="manual/setup.html" title="Chapter 2. Setup">setup
    documentation</a> for detailed
    instructions. You may wish to browse those files ahead
    of time to get a feel for what's required.
    </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.how_to_get_sources"></a><a id="q-how_to_get_sources"></a><p><strong>3.2.</strong></p></td><td align="left" valign="top"><p>How does one get current libstdc++ sources?
    </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-how_to_get_sources"></a></td><td align="left" valign="top"><p>
    Libstdc++ sources for all official releases can be obtained as
    part of the GCC sources, available from various sites and
    mirrors. A full <a class="link" href="https://gcc.gnu.org/mirrors.html" target="_top">list of
    download sites</a> is provided on the main GCC site.
    </p><p>
    Current libstdc++ sources can always be found in the main GCC source
    repository, available using the appropriate version control tool.
    At this time, that tool is <span class="application">Git</span>.
    For more details see the documentation on
    <a class="link" href="https://gcc.gnu.org/git.html" target="_top">using the Git repository</a>.
    </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.how_to_test"></a><a id="q-how_to_test"></a><p><strong>3.3.</strong></p></td><td align="left" valign="top"><p>How do I know if it works?
    </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-how_to_test"></a></td><td align="left" valign="top"><p>
    Libstdc++ comes with its own validation testsuite, which includes
    conformance testing, regression testing, ABI testing, and
    performance testing. Please consult the
    <a class="link" href="https://gcc.gnu.org/install/test.html" target="_top">testing
    documentation</a> for GCC and
    <a class="link" href="manual/test.html" title="Testing">Testing</a> in the libstdc++
    manual for more details.
    </p><p>
    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,
    <span class="emphasis"><em>please</em></span> write up your idea and send it to the list!
    </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.how_to_set_paths"></a><a id="q-how_to_set_paths"></a><p><strong>3.4.</strong></p></td><td align="left" valign="top"><p>How do I insure that the dynamically linked library will be found?
    </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-how_to_set_paths"></a></td><td align="left" valign="top"><p>
    Depending on your platform and library version, the error message might
    be similar to one of the following:
    </p><pre class="screen">
    ./a.out: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory

    /usr/libexec/ld-elf.so.1: Shared object "libstdc++.so.6" not found
    </pre><p>
    This doesn't mean that the shared library isn't installed, only
    that the dynamic linker can't find it. When a dynamically-linked
    executable is run the linker finds and loads the required shared
    libraries by searching a pre-configured list of directories. If
    the directory where you've installed libstdc++ is not in this list
    then the libraries won't be found.
    </p><p>
    If you already have an older version of libstdc++ installed then the
    error might look like one of the following instead:
    </p><pre class="screen">
    ./a.out: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.20' not found
    ./a.out: /usr/lib/libstdc++.so.6: version `CXXABI_1.3.8' not found
    </pre><p>
    This means the linker found <code class="filename">/usr/lib/libstdc++.so.6</code>
    but that library belongs to an older version of GCC than was used to
    compile and link the program <code class="filename">a.out</code> (or some part
    of it). The program depends on code defined in the newer libstdc++
    that belongs to the newer version of GCC, so the linker must be told
    how to find the newer libstdc++ shared library.
    </p><p>
    The simplest way to fix this is
    to use the <code class="envar">LD_LIBRARY_PATH</code> environment variable,
    which is a colon-separated list of directories in which the linker
    will search for shared libraries:
    </p><pre class="screen"><span class="command"><strong>
    export LD_LIBRARY_PATH=${prefix}/lib:$LD_LIBRARY_PATH
    </strong></span></pre><p>
    Here the shell variable <code class="varname">${prefix}</code> is assumed to contain
    the directory prefix where GCC was installed to. The directory containing
    the library might depend on whether you want the 32-bit or 64-bit copy
    of the library, so for example would be
    <code class="filename">${prefix}/lib64</code> on some systems.
    The exact environment variable to use will depend on your
    platform, e.g. <code class="envar">DYLD_LIBRARY_PATH</code> for Darwin,
    <code class="envar">LD_LIBRARY_PATH_32</code>/<code class="envar">LD_LIBRARY_PATH_64</code>
    for Solaris 32-/64-bit,
    and <code class="envar">SHLIB_PATH</code> for HP-UX.
    </p><p>
    See the man pages for <span class="command"><strong>ld</strong></span>, <span class="command"><strong>ldd</strong></span>
    and <span class="command"><strong>ldconfig</strong></span> for more information. The dynamic
    linker has different names on different platforms but the man page
    is usually called something such as <code class="filename">ld.so</code>,
    <code class="filename">rtld</code> or <code class="filename">dld.so</code>.
    </p><p>
    Using <code class="envar">LD_LIBRARY_PATH</code> is not always the best solution,
    <a class="link" href="manual/using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic" title="Finding Dynamic or Shared Libraries">Finding Dynamic or Shared
    Libraries</a> in the manual gives some alternatives.
    </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.what_is_libsupcxx"></a><a id="q-what_is_libsupcxx"></a><p><strong>3.5.</strong></p></td><td align="left" valign="top"><p>
      What's libsupc++?
    </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-what_is_libsupcxx"></a></td><td align="left" valign="top"><p>
      If the only functions from <code class="filename">libstdc++.a</code>
      which you need are language support functions (those listed in
      <a class="link" href="manual/support.html" title="Chapter 4.  Support">clause 18</a> of the
      standard, e.g., <code class="function">new</code> and
      <code class="function">delete</code>), then try linking against
      <code class="filename">libsupc++.a</code>, which is a subset of
      <code class="filename">libstdc++.a</code>.  (Using <span class="command"><strong>gcc</strong></span>
      instead of <span class="command"><strong>g++</strong></span> and explicitly linking in
      <code class="filename">libsupc++.a</code> via <code class="option">-lsupc++</code>
      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 class="filename">libstdc++.a</code>.
    </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.size"></a><a id="q-size"></a><p><strong>3.6.</strong></p></td><td align="left" valign="top"><p>
      This library is HUGE!
    </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-size"></a></td><td align="left" valign="top"><p>
    Usually the size of libraries on disk isn't noticeable.  When a
    link editor (or simply <span class="quote">“<span class="quote">linker</span>”</span>) 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++ about this; it's just common behavior, given here
    for background reasons.)
    </p><p>
    Some of the object files which make up
    <code class="filename">libstdc++.a</code> are rather large.
    If you create a statically-linked executable with
    <code class="option">-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 <code class="filename">.o</code> file.  For libstdc++ 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>
    On supported platforms, libstdc++ takes advantage of garbage
    collection in the GNU linker to get a result similar to separating
    each symbol into a separate source and object files. On these platforms,
    GNU ld can place each function and variable into its own
    section in a <code class="filename">.o</code> 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></td></tr><tr class="toc"><td align="left" valign="top" colspan="2"><dl><dt>4.1. <a href="faq.html#faq.other_compilers">
      Can libstdc++ be used with non-GNU compilers?
    </a></dt><dt>4.2. <a href="faq.html#faq.solaris_long_long">
      No 'long long' type on Solaris?
    </a></dt><dt>4.3. <a href="faq.html#faq.predefined">
      _XOPEN_SOURCE and _GNU_SOURCE are always defined?
    </a></dt><dt>4.4. <a href="faq.html#faq.darwin_ctype">
      Mac OS X ctype.h is broken! How can I fix it?
    </a></dt><dt>4.5. <a href="faq.html#faq.threads_i386">
      Threading is broken on i386?
    </a></dt><dt>4.6. <a href="faq.html#faq.atomic_mips">
      MIPS atomic operations
    </a></dt><dt>4.7. <a href="faq.html#faq.linux_glibc">
      Recent GNU/Linux glibc required?
    </a></dt><dt>4.8. <a href="faq.html#faq.freebsd_wchar">
      Can't use wchar_t/wstring on FreeBSD
    </a></dt></dl></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.other_compilers"></a><a id="q-other_compilers"></a><p><strong>4.1.</strong></p></td><td align="left" valign="top"><p>
      Can libstdc++ be used with non-GNU compilers?
    </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-other_compilers"></a></td><td align="left" valign="top"><p>
    Perhaps.
    </p><p>
    Since the goal of ISO Standardization is for all C++
    implementations to be able to share code, libstdc++ should be
    usable under any ISO-compliant compiler, at least in theory.
    </p><p>
    However, the reality is that libstdc++ is targeted and optimized
    for GCC/G++. This means that often libstdc++ uses specific,
    non-standard features of G++ that are not present in older
    versions of proprietary compilers. It may take as much as a year or two
    after an official release of GCC that contains these features for
    proprietary tools to support these constructs.
    </p><p>
    Recent versions of libstdc++ are known to work with the Clang compiler.
    In the near past, specific released versions of libstdc++ have
    been known to work with versions of the EDG C++ compiler, and
    vendor-specific proprietary C++ compilers such as the Intel ICC
    C++ compiler.
    </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.solaris_long_long"></a><a id="q-solaris_long_long"></a><p><strong>4.2.</strong></p></td><td align="left" valign="top"><p>
      No '<span class="type">long long</span>' type on Solaris?
    </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-solaris_long_long"></a></td><td align="left" valign="top"><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>This answer is old and probably no longer be relevant.</p></div><p>
    By default we try to support the C99 <span class="type">long long</span> type.
    This requires that certain functions from your C library be present.
    </p><p>
    Up through release 3.0.2 the platform-specific tests performed by
    libstdc++ were too general, resulting in a conservative approach
    to enabling the <span class="type">long long</span> code paths. The most
    commonly reported platform affected was Solaris.
    </p><p>
    This has been fixed for libstdc++ releases greater than 3.0.3.
    </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.predefined"></a><a id="q-predefined"></a><p><strong>4.3.</strong></p></td><td align="left" valign="top"><p>
      <code class="constant">_XOPEN_SOURCE</code> and <code class="constant">_GNU_SOURCE</code> are always defined?
    </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-predefined"></a></td><td align="left" valign="top"><p>On GNU/Linux, <span class="command"><strong>g++</strong></span> (but not <span class="command"><strong>gcc</strong></span>)
         always defines the preprocessor macro
	 <code class="constant">_GNU_SOURCE</code>.  On Solaris, the same happens
         with <code class="constant">_XOPEN_SOURCE</code>.  (This is not an exhaustive list;
         other macros and other platforms are also affected.)
      </p><p>These macros are typically used in C library headers, guarding new
         versions of functions from their older versions.  Historically,
	 libstdc++ needed these macros to ensure that the headers provided by
	 the C library declared all the functions that libstdc++ relies on.
	 For example, functions for working with <code class="code">long long</code>,
	 such as <code class="function">strtoll</code>, are needed by libstdc++ but
	 were not part of the C90 standard.
      </p><p>Additionally the C++ standard requires behavior which is only
         available on certain platforms after certain macros are defined.
         Usually the issue involves I/O-related typedefs.  In order to
         ensure correctness, the compiler simply predefines those macros.
      </p><p>Note that it's not enough to <code class="literal">#define</code> them
	 only when the library is being built (during installation).
         Much of the library exists as headers, which means that
         the macros must also be defined as your programs are parsed and
         compiled.
      </p><p>To see which macros are defined, look for
         <code class="varname">CPLUSPLUS_CPP_SPEC</code> in
         the gcc config headers for your target (and try changing them to
         see what happens when building complicated code).  You can also run
         <span class="command"><strong>g++ -E -dM -x c++ /dev/null</strong></span> to display
         a list of predefined macros for any particular installation.
      </p><p>This has been discussed on the mailing lists
         <a class="link" href="https://gcc.gnu.org/cgi-bin/htsearch?method=and&amp;format=builtin-long&amp;sort=score&amp;words=_XOPEN_SOURCE+Solaris" target="_top">quite a bit</a>.
      </p><p>This method is something of a wart.  We'd like to find a cleaner
         solution, but nobody yet has contributed the time.
      </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.darwin_ctype"></a><a id="q-darwin_ctype"></a><p><strong>4.4.</strong></p></td><td align="left" valign="top"><p>
      Mac OS X <code class="filename">ctype.h</code> is broken! How can I fix it?
    </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-darwin_ctype"></a></td><td align="left" valign="top"><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>This answer is old and probably no longer be relevant.</p></div><p>
         This was a long-standing bug in the OS X support.  Fortunately, the
         <a class="link" href="https://gcc.gnu.org/ml/gcc/2002-03/msg00817.html" target="_top">patch</a>
	 was quite simple, and well-known.
      </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.threads_i386"></a><a id="q-threads_i386"></a><p><strong>4.5.</strong></p></td><td align="left" valign="top"><p>
      Threading is broken on i386?
    </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-threads_i386"></a></td><td align="left" valign="top"><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>This answer is old and probably no longer be relevant.</p></div><p>Support for atomic integer operations was broken on i386
         platforms.  The assembly code accidentally used opcodes that are
         only available on the i486 and later.  So if you configured GCC
         to target, for example, i386-linux, but actually used the programs
         on an i686, then you would encounter no problems.  Only when
         actually running the code on a i386 will the problem appear.
      </p><p>This is fixed in 3.2.2.
      </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.atomic_mips"></a><a id="q-atomic_mips"></a><p><strong>4.6.</strong></p></td><td align="left" valign="top"><p>
      MIPS atomic operations
    </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-atomic_mips"></a></td><td align="left" valign="top"><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>This answer is old and probably no longer be relevant.</p></div><p>
    The atomic locking routines for MIPS targets requires MIPS II
    and later.  A patch went in just after the 3.3 release to
    make mips* use the generic implementation instead.  You can also
    configure for mipsel-elf as a workaround.
    </p><p>
    The mips*-*-linux* port continues to use the MIPS II routines, and more
    work in this area is expected.
    </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.linux_glibc"></a><a id="q-linux_glibc"></a><p><strong>4.7.</strong></p></td><td align="left" valign="top"><p>
      Recent GNU/Linux glibc required?
    </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-linux_glibc"></a></td><td align="left" valign="top"><p>When running on GNU/Linux, libstdc++ 3.2.1 (shared library version
         5.0.1) and later uses localization and formatting code from the system
         C library (glibc) version 2.2.5 which contains necessary bugfixes.
         All GNU/Linux distros make more recent versions available now.
         libstdc++ 4.6.0 and later require glibc 2.3 or later for this
         localization and formatting code.
      </p><p>The guideline is simple:  the more recent the C++ library, the
         more recent the C library.  (This is also documented in the main
         GCC installation instructions.)
      </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.freebsd_wchar"></a><a id="q-freebsd_wchar"></a><p><strong>4.8.</strong></p></td><td align="left" valign="top"><p>
      Can't use <span class="type">wchar_t</span>/<code class="classname">wstring</code> on FreeBSD
    </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-freebsd_wchar"></a></td><td align="left" valign="top"><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>This answer is old and probably no longer be relevant.</p></div><p>
    Older versions of FreeBSD's C library do not have sufficient
    support for wide character functions, and as a result the
    libstdc++ configury decides that <span class="type">wchar_t</span> support should be
    disabled. In addition, the libstdc++ platform checks that
    enabled <span class="type">wchar_t</span> were quite strict, and not granular
    enough to detect when the minimal support to
    enable <span class="type">wchar_t</span> and C++ library structures
    like <code class="classname">wstring</code> were present. This impacted Solaris,
    Darwin, and BSD variants, and is fixed in libstdc++ versions post 4.1.0.
    </p><p>
    </p></td></tr><tr class="toc"><td align="left" valign="top" colspan="2"><dl><dt>5.1. <a href="faq.html#faq.what_works">
      What works already?
    </a></dt><dt>5.2. <a href="faq.html#faq.standard_bugs">
      Bugs in the ISO C++ language or library specification
    </a></dt><dt>5.3. <a href="faq.html#faq.compiler_bugs">
      Bugs in the compiler (gcc/g++) and not libstdc++
    </a></dt></dl></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.what_works"></a><a id="q-what_works"></a><p><strong>5.1.</strong></p></td><td align="left" valign="top"><p>
      What works already?
    </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-what_works"></a></td><td align="left" valign="top"><p>
    Short answer: Pretty much everything <span class="emphasis"><em>works</em></span>
    except for some corner cases.  Support for localization
    in <code class="classname">locale</code> may be incomplete on some non-GNU
    platforms. Also dependent on the underlying platform is support
    for <span class="type">wchar_t</span> and <span class="type">long long</span> specializations,
    and details of thread support.
    </p><p>
    Long answer: See the implementation status pages for
    <a class="link" href="manual/status.html#status.iso.1998" title="C++ 1998/2003">C++98</a>,
    <a class="link" href="manual/status.html#status.iso.tr1" title="C++ TR1">TR1</a>,
    <a class="link" href="manual/status.html#status.iso.2011" title="C++ 2011">C++11</a>,
    <a class="link" href="manual/status.html#status.iso.2014" title="C++ 2014">C++14</a>, and
    <a class="link" href="manual/status.html#status.iso.2017" title="C++ 2017">C++17</a>.
    </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.standard_bugs"></a><a id="q-standard_bugs"></a><p><strong>5.2.</strong></p></td><td align="left" valign="top"><p>
      Bugs in the ISO C++ language or library specification
    </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-standard_bugs"></a></td><td align="left" valign="top"><p>
    Unfortunately, there are some.
    </p><p>
    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 public list of the library defects is occasionally
    published on <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/" target="_top">the WG21
    website</a>.
    Many of these issues have resulted in
    <a class="link" href="manual/bugs.html#manual.intro.status.bugs.iso" title="Standard Bugs">code changes in libstdc++</a>.
    </p><p>
    If you think you've discovered a new bug that is not listed,
    please post a message describing your problem to the author of
    the library issues list.
    </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.compiler_bugs"></a><a id="q-compiler_bugs"></a><p><strong>5.3.</strong></p></td><td align="left" valign="top"><p>
      Bugs in the compiler (gcc/g++) and not libstdc++
    </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-compiler_bugs"></a></td><td align="left" valign="top"><p>
    On occasion, the compiler is wrong. Please be advised that this
    happens much less often than one would think, and avoid jumping to
    conclusions.
    </p><p>
    First, examine the ISO C++ standard. Second, try another compiler
    or an older version of the GNU compilers. Third, you can find more
    information on the libstdc++ and the GCC mailing lists: search
    these lists with terms describing your issue.
    </p><p>
    Before reporting a bug, please examine the
    <a class="link" href="https://gcc.gnu.org/bugs/" target="_top">bugs database</a>, with the
    component set to <span class="quote">“<span class="quote">c++</span>”</span>.
    </p></td></tr><tr class="toc"><td align="left" valign="top" colspan="2"><dl><dt>6.1. <a href="faq.html#faq.stream_reopening_fails">
      Reopening a stream fails
    </a></dt><dt>6.2. <a href="faq.html#faq.wefcxx_verbose">
      -Weffc++ complains too much
    </a></dt><dt>6.3. <a href="faq.html#faq.ambiguous_overloads">
      Ambiguous overloads after including an old-style header
    </a></dt><dt>6.4. <a href="faq.html#faq.v2_headers">
      The g++-3 headers are not ours
    </a></dt><dt>6.5. <a href="faq.html#faq.boost_concept_checks">
      Errors about *Concept and
      constraints in the STL
    </a></dt><dt>6.6. <a href="faq.html#faq.dlopen_crash">
      Program crashes when using library code in a
      dynamically-loaded library
    </a></dt><dt>6.7. <a href="faq.html#faq.memory_leaks">
      “Memory leaks” in libstdc++
    </a></dt><dt>6.8. <a href="faq.html#faq.list_size_on">
      list::size() is O(n)!
    </a></dt><dt>6.9. <a href="faq.html#faq.easy_to_fix">
      Aw, that's easy to fix!
    </a></dt></dl></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.stream_reopening_fails"></a><a id="q-stream_reopening_fails"></a><p><strong>6.1.</strong></p></td><td align="left" valign="top"><p>
      Reopening a stream fails
    </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-stream_reopening_fails"></a></td><td align="left" valign="top"><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>This answer is old and probably no longer be relevant.</p></div><p>
    Prior to GCC 4.0 this was one of the most-reported non-bug reports.
    Executing a sequence like this would fail:
    </p><pre class="programlisting">
    #include &lt;fstream&gt;
    ...
    std::fstream  fs("a_file");
    // .
    // . do things with fs...
    // .
    fs.close();
    fs.open("a_new_file");
</pre><p>
    All operations on the re-opened <code class="varname">fs</code> would fail, or at
    least act very strangely, especially if <code class="varname">fs</code> reached the
    EOF state on the previous file.
    The original C++98 standard did not specify behavior in this case, and
    the <a class="link" href="manual/bugs.html#manual.bugs.dr22">resolution of DR #22</a> was to
    leave the state flags unchanged on a successful call to
    <code class="function">open()</code>.
    You had to insert a call to <code class="function">fs.clear()</code> between the
    calls to <code class="function">close()</code> and <code class="function">open()</code>,
    and then everything will work as expected.
    <span class="emphasis"><em>Update:</em></span> For GCC 4.0 we implemented the resolution
    of <a class="link" href="manual/bugs.html#manual.bugs.dr409">DR #409</a> and
    <code class="function">open()</code>
    now calls <code class="function">clear()</code> on success.
    </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.wefcxx_verbose"></a><a id="q-wefcxx_verbose"></a><p><strong>6.2.</strong></p></td><td align="left" valign="top"><p>
      -Weffc++ complains too much
    </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-wefcxx_verbose"></a></td><td align="left" valign="top"><p>
    Many warnings are emitted when <code class="option">-Weffc++</code> is used.  Making
    libstdc++ <code class="option">-Weffc++</code>-clean is not a goal of the project,
    for a few reasons.  Mainly, that option tries to enforce
    object-oriented programming, while the Standard Library isn't
    necessarily trying to be OO. The option also enforces outdated guidelines
    from old editions of the books, and the advice isn't all relevant to
    modern C++ (especially C++11 and later).
    </p><p>
    We do, however, try to have libstdc++ sources as clean as possible. If
    you see some simple changes that pacify <code class="option">-Weffc++</code>
    without other drawbacks, send us a patch.
    </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.ambiguous_overloads"></a><a id="q-ambiguous_overloads"></a><p><strong>6.3.</strong></p></td><td align="left" valign="top"><p>
      Ambiguous overloads after including an old-style header
    </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-ambiguous_overloads"></a></td><td align="left" valign="top"><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>This answer is old and probably no longer be relevant.</p></div><p>
    Another problem is the <code class="literal">rel_ops</code> namespace and the template
    comparison operator functions contained therein.  If they become
    visible in the same namespace as other comparison functions
    (e.g., <span class="quote">“<span class="quote">using</span>”</span> them and the
    <code class="filename">&lt;iterator&gt;</code> header),
    then you will suddenly be faced with huge numbers of ambiguity
    errors.  This was discussed on the mailing list; Nathan Myers
    <a class="link" href="https://gcc.gnu.org/ml/libstdc++/2001-01/msg00247.html" target="_top">sums
      things up here</a>.  The collisions with vector/string iterator
    types have been fixed for 3.1.
    </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.v2_headers"></a><a id="q-v2_headers"></a><p><strong>6.4.</strong></p></td><td align="left" valign="top"><p>
      The g++-3 headers are <span class="emphasis"><em>not ours</em></span>
    </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-v2_headers"></a></td><td align="left" valign="top"><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>This answer is old and probably no longer be relevant.</p></div><p>
	If you are using headers in
	<code class="filename">${prefix}/include/g++-3</code>, or if
	the installed library's name looks like
	<code class="filename">libstdc++-2.10.a</code> or
	<code class="filename">libstdc++-libc6-2.10.so</code>, then
	you are using the old libstdc++-v2 library, which is non-standard and
	unmaintained.  Do not report problems with -v2 to the -v3
	mailing list.
      </p><p>
	For GCC versions 3.0 and 3.1 the libstdc++ header files are installed in
	<code class="filename">${prefix}/include/g++-v3</code>
	(see the 'v'?).  Starting with version 3.2 the headers are installed in
	<code class="filename">${prefix}/include/c++/${version}</code>
	as this prevents headers from previous versions being found by mistake.
      </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.boost_concept_checks"></a><a id="q-boost_concept_checks"></a><p><strong>6.5.</strong></p></td><td align="left" valign="top"><p>
      Errors about <span class="emphasis"><em>*Concept</em></span> and
      <span class="emphasis"><em>constraints</em></span> in the STL
    </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-boost_concept_checks"></a></td><td align="left" valign="top"><p>
    If you see compilation errors containing messages about
    <span class="errortext">foo Concept</span> and something to do with a
    <span class="errortext">constraints</span> member function, then most
    likely you have violated one of the requirements for types used
    during instantiation of template containers and functions.  For
    example, EqualityComparableConcept appears if your types must be
    comparable with == and you have not provided this capability (a
    typo, or wrong visibility, or you just plain forgot, etc).
    </p><p>
    More information, including how to optionally enable/disable the
    checks, is available in the
    <a class="link" href="manual/concept_checking.html" title="Concept Checking">Diagnostics</a>.
    chapter of the manual.
    </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.dlopen_crash"></a><a id="q-dlopen_crash"></a><p><strong>6.6.</strong></p></td><td align="left" valign="top"><p>
      Program crashes when using library code in a
      dynamically-loaded library
    </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-dlopen_crash"></a></td><td align="left" valign="top"><p>
    If you are using the C++ library across dynamically-loaded
    objects, make certain that you are passing the correct options
    when compiling and linking:
    </p><div class="literallayout"><p><br />
    Compile your library components:<br />
    <span class="command"><strong>g++ -fPIC -c a.cc</strong></span><br />
    <span class="command"><strong>g++ -fPIC -c b.cc</strong></span><br />
    ...<br />
    <span class="command"><strong>g++ -fPIC -c z.cc</strong></span><br />
<br />
    Create your library:<br />
    <span class="command"><strong>g++ -fPIC -shared -rdynamic -o libfoo.so a.o b.o ... z.o</strong></span><br />
<br />
    Link the executable:<br />
    <span class="command"><strong>g++ -fPIC -rdynamic -o foo ... -L. -lfoo -ldl</strong></span><br />
    </p></div></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.memory_leaks"></a><a id="q-memory_leaks"></a><p><strong>6.7.</strong></p></td><td align="left" valign="top"><p>
      <span class="quote">“<span class="quote">Memory leaks</span>”</span> in libstdc++
    </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-memory_leaks"></a></td><td align="left" valign="top"><p>
    Since GCC 5.1.0, libstdc++ automatically allocates a pool
    of a few dozen kilobytes on startup. This pool is used to ensure it's
    possible to throw exceptions (such as <code class="classname">bad_alloc</code>)
    even when <code class="code">malloc</code> is unable to allocate any more memory.
    With some versions of <a class="link" href="https://valgrind.org" target="_top"><span class="command"><strong>valgrind</strong></span></a>
    this pool will be shown as "still reachable" when the process exits, e.g.
    <code class="code">still reachable: 72,704 bytes in 1 blocks</code>.
    This memory is not a leak, because it's still in use by libstdc++,
    and the memory will be returned to the OS when the process exits.
    Later versions of <span class="command"><strong>valgrind</strong></span> know how to free this
    pool as the process exits, and so won't show any "still reachable" memory.
    </p><p>
    In the past, a few people reported that the standard containers appear
    to leak memory when tested with memory checkers such as
    <span class="command"><strong>valgrind</strong></span>.
    Under some (non-default) configurations the library's allocators keep
    free memory in a
    pool for later reuse, rather than deallocating it with <code class="code">delete</code>
    Although this memory is always reachable by the library and is never
    lost, memory debugging tools can report it as a leak.  If you
    want to test the library for memory leaks please read
    <a class="link" href="manual/debug.html#debug.memory" title="Memory Leak Hunting">Tips for memory leak hunting</a>
    first.
    </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.list_size_on"></a><a id="q-list_size_on"></a><p><strong>6.8.</strong></p></td><td align="left" valign="top"><p>
      <code class="code">list::size()</code> is O(n)!
    </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-list_size_on"></a></td><td align="left" valign="top"><p>
    See
    the <a class="link" href="manual/containers.html" title="Chapter 9.  Containers">Containers</a>
    chapter.
    </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.easy_to_fix"></a><a id="q-easy_to_fix"></a><p><strong>6.9.</strong></p></td><td align="left" valign="top"><p>
      Aw, that's easy to fix!
    </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-easy_to_fix"></a></td><td align="left" valign="top"><p>
    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 <a class="link" href="https://gcc.gnu.org/contribute.html" target="_top">submitting
    patches</a> that covers the procedure, but for libstdc++ you
    should also send the patch to our mailing list in addition to
    the GCC patches mailing list.  The libstdc++
    <a class="link" href="manual/appendix_contributing.html" title="Appendix A.  Contributing">contributors' page</a>
    also talks about how to submit patches.
    </p><p>
    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 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 caught immediately by the testsuite -
    but only if such a test exists.
    </p></td></tr><tr class="toc"><td align="left" valign="top" colspan="2"><dl><dt>7.1. <a href="faq.html#faq.iterator_as_pod">
      string::iterator is not char*;
      vector&lt;T&gt;::iterator is not T*
    </a></dt><dt>7.2. <a href="faq.html#faq.what_is_next">
      What's next after libstdc++?
    </a></dt><dt>7.3. <a href="faq.html#faq.sgi_stl">
      What about the STL from SGI?
    </a></dt><dt>7.4. <a href="faq.html#faq.extensions_and_backwards_compat">
      Extensions and Backward Compatibility
    </a></dt><dt>7.5. <a href="faq.html#faq.tr1_support">
      Does libstdc++ support TR1?
    </a></dt><dt>7.6. <a href="faq.html#faq.get_iso_cxx">How do I get a copy of the ISO C++ Standard?
    </a></dt><dt>7.7. <a href="faq.html#faq.what_is_abi">
      What's an ABI and why is it so messy?
    </a></dt><dt>7.8. <a href="faq.html#faq.size_equals_capacity">
      How do I make std::vector&lt;T&gt;::capacity() == std::vector&lt;T&gt;::size?
    </a></dt></dl></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.iterator_as_pod"></a><a id="faq.iterator_as_pod_q"></a><p><strong>7.1.</strong></p></td><td align="left" valign="top"><p>
      <code class="classname">string::iterator</code> is not <code class="code">char*</code>;
      <code class="classname">vector&lt;T&gt;::iterator</code> is not <code class="code">T*</code>
    </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="faq.iterator_as_pod_a"></a></td><td align="left" valign="top"><p>
    If you have code that depends on container&lt;T&gt; iterators
    being implemented as pointer-to-T, your code is broken. It's
    considered a feature, not a bug, that libstdc++ points this out.
    </p><p>
    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 were never guaranteed by the Standard anyway.  The
    type-safety achieved by making iterators a real class rather
    than a typedef for <span class="type">T*</span> outweighs nearly all opposing
    arguments.
    </p><p>
    Code which does assume that a vector/string iterator <code class="varname">i</code>
    is a pointer can often be fixed by changing <code class="varname">i</code> in
    certain expressions to <code class="varname">&amp;*i</code>.
    </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.what_is_next"></a><a id="q-what_is_next"></a><p><strong>7.2.</strong></p></td><td align="left" valign="top"><p>
      What's next after libstdc++?
    </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-what_is_next"></a></td><td align="left" valign="top"><p>
	The goal of libstdc++ is to produce a
	fully-compliant, fully-portable Standard Library.
	While the C++ Standard continues to evolve the libstdc++ will
        continue to track it.
      </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.sgi_stl"></a><a id="q-sgi_stl"></a><p><strong>7.3.</strong></p></td><td align="left" valign="top"><p>
      What about the STL from SGI?
    </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-sgi_stl"></a></td><td align="left" valign="top"><p>
    The STL (Standard Template Library) was the inspiration for large chunks
    of the C++ Standard Library, but the terms are not interchangeable and
    they don't mean the same thing. The C++ Standard Library includes lots of
    things that didn't come from the STL, and some of them aren't even
    templates, such as <code class="classname">std::locale</code> and
    <code class="classname">std::thread</code>.
    </p><p>
    Libstdc++-v3 incorporates a lot of code from
    <a class="link" href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/" target="_top">the SGI STL</a>
    (the final merge was from
    <a class="link" href="https://web.archive.org/web/20171206110416/http://www.sgi.com/tech/stl/whats_new.html" target="_top">release 3.3</a>).
    The code in libstdc++ contains many fixes and changes compared to the
    original SGI code.
    </p><p>
    In particular, <code class="classname">string</code> is not from SGI and makes no
    use of their "rope" class (although that is included as an optional
    extension), neither is <code class="classname">valarray</code> nor some others.
    Classes like <code class="classname">vector&lt;&gt;</code> were from SGI, but have
    been extensively modified.
    </p><p>
    More information on the evolution of libstdc++ can be found at the
    <a class="link" href="manual/api.html" title="API Evolution and Deprecation History">API
    evolution</a>
    and <a class="link" href="manual/backwards.html" title="Backwards Compatibility">backwards
    compatibility</a> documentation.
    </p><p>
    The <a class="link" href="https://web.archive.org/web/20171104092813/http://www.sgi.com/tech/stl/FAQ.html" target="_top">FAQ</a>
    for SGI's STL is still recommended reading.
    </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.extensions_and_backwards_compat"></a><a id="q-extensions_and_backwards_compat"></a><p><strong>7.4.</strong></p></td><td align="left" valign="top"><p>
      Extensions and Backward Compatibility
    </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-extensions_and_backwards_compat"></a></td><td align="left" valign="top"><p>
      See the <a class="link" href="manual/backwards.html" title="Backwards Compatibility">link</a> on backwards compatibility and <a class="link" href="manual/api.html" title="API Evolution and Deprecation History">link</a> on evolution.
    </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.tr1_support"></a><a id="q-tr1_support"></a><p><strong>7.5.</strong></p></td><td align="left" valign="top"><p>
      Does libstdc++ support TR1?
    </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-tr1_support"></a></td><td align="left" valign="top"><p>
    Yes.
    </p><p>
    The C++ Standard Library
    <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf" target="_top">
    Technical Report 1</a> added many new features to the library.
    </p><p>
    The implementation status of TR1 in libstdc++ can be tracked
    <a class="link" href="manual/status.html#status.iso.tr1" title="C++ TR1">on the TR1 status page</a>.
    </p><p>
    New code should probably not use TR1, because almost everything in it has
    been added to the main C++ Standard Library (usually with significant
    improvements).
    The TR1 implementation in libstdc++ is no longer actively maintained.
    </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.get_iso_cxx"></a><a id="q-get_iso_cxx"></a><p><strong>7.6.</strong></p></td><td align="left" valign="top"><p>How do I get a copy of the ISO C++ Standard?
    </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-get_iso_cxx"></a></td><td align="left" valign="top"><p>
    Please refer to the <a class="link" href="manual/appendix_contributing.html" title="Appendix A.  Contributing">Contributing</a>
    section in our manual.
    </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.what_is_abi"></a><a id="q-what_is_abi"></a><p><strong>7.7.</strong></p></td><td align="left" valign="top"><p>
      What's an ABI and why is it so messy?
    </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-what_is_abi"></a></td><td align="left" valign="top"><p>
    <acronym class="acronym">ABI</acronym> stands for <span class="quote">“<span class="quote">Application Binary
    Interface</span>”</span>.  Conventionally, it refers to a great
    mass of details about how arguments are arranged on the call
    stack and/or in registers, and how various types are arranged
    and padded in structs.  A single CPU design may suffer
    multiple ABIs designed by different development tool vendors
    who made different choices, or even by the same vendor for
    different target applications or compiler versions.  In ideal
    circumstances the CPU designer presents one ABI and all the
    OSes and compilers use it.  In practice every ABI omits
    details that compiler implementers (consciously or
    accidentally) must choose for themselves.
    </p><p>
    That ABI definition suffices for compilers to generate code so a
    program can interact safely with an OS and its lowest-level libraries.
    Users usually want an ABI to encompass more detail, allowing libraries
    built with different compilers (or different releases of the same
    compiler!) to be linked together.  For C++, this includes many more
    details than for C, and most CPU designers (for good reasons elaborated
    below) have not stepped up to publish C++ ABIs.  Such an ABI has been
    defined for the Itanium architecture (see
    <a class="link" href="https://itanium-cxx-abi.github.io/cxx-abi/" target="_top">C++
    ABI for Itanium</a>) and that is used by G++ and other compilers
    as the de facto standard ABI on many common architectures (including x86).
    G++ can also use the ARM architecture's EABI, for embedded
    systems relying only on a <span class="quote">“<span class="quote">free-standing implementation</span>”</span> that
    doesn't include (much of) the standard library, and the GNU EABI for
    hosted implementations on ARM.  Those ABIs cover low-level details
    such as virtual function implementation, struct inheritance layout,
    name mangling, and exception handling.
   </p><p>
    A useful C++ ABI must also incorporate many details of the standard
    library implementation.  For a C ABI, the layouts of a few structs
    (such as <span class="type">FILE</span>, <span class="type">stat</span>, <span class="type">jmpbuf</span>,
    and the like) and a few macros suffice.
    For C++, the details include the complete set of names of functions
    and types used, the offsets of class members and virtual functions,
    and the actual definitions of all inlines.  C++ exposes many more
    library details to the caller than C does.  It makes defining
    a complete ABI a much bigger undertaking, and requires not just
    documenting library implementation details, but carefully designing
    those details so that future bug fixes and optimizations don't
    force breaking the ABI.
    </p><p>
    There are ways to help isolate library implementation details from the
    ABI, but they trade off against speed.  Library details used in inner
    loops (e.g., <code class="function">getchar</code>) must be exposed and frozen for
    all time, but many others may reasonably be kept hidden from user code,
    so they may later be changed.  Deciding which, and implementing
    the decisions, must happen before you can reasonably document a
    candidate C++ ABI that encompasses the standard library.
    </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.size_equals_capacity"></a><a id="q-size_equals_capacity"></a><p><strong>7.8.</strong></p></td><td align="left" valign="top"><p>
      How do I make <code class="code">std::vector&lt;T&gt;::capacity() == std::vector&lt;T&gt;::size</code>?
    </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-size_equals_capacity"></a></td><td align="left" valign="top"><p>
    Since C++11 just call the <code class="function">shrink_to_fit()</code> member
    function.
    </p><p>
    Before C++11, the standard idiom for deallocating a
    <code class="classname">vector&lt;T&gt;</code>'s
    unused memory was to create a temporary copy of the vector and swap their
    contents, e.g. for <code class="classname">vector&lt;T&gt; v</code>
    </p><div class="literallayout"><p><br />
     std::vector&lt;T&gt;(v).swap(v);<br />
    </p></div><p>
    The copy will take O(n) time and the swap is constant time.
    </p><p>
    See <a class="link" href="manual/strings.html#strings.string.shrink" title="Shrink to Fit">Shrink-to-fit
    strings</a> for a similar solution for strings.
    </p></td></tr></tbody></table></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk03.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk03.html">Up</a></td><td width="40%" align="right"> </td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html>