c644b7df11
This fixes missing libiconv symbols when libstdc++ is built on a system that has libiconv installed. If the libiconv headers are found then libstdc++ depends on libiconv_open etc instead of libc's iconv_open. But without this fix libstdc++ is not linked to the libiconv library that provides the definitions of those symbols. As discussed in PR 93602 this changed means that libstdc++.so.6 might have an rpath pointing to the location of the libiconv.so library. If that is not desired, then GCC must be configured to link to a static libiconv.a instead, using either --with-libiconv-type=static or an in-tree build of libiconv. libstdc++-v3/ChangeLog: PR libstdc++/93602 * doc/xml/manual/prerequisites.xml: Document libiconv workarounds. * doc/html/manual/setup.html: Regenerate. * src/Makefile.am (CXXLINK): Add $(LTLIBICONV). * src/Makefile.in: Regenerate.
184 lines
6.2 KiB
XML
184 lines
6.2 KiB
XML
<section xmlns="http://docbook.org/ns/docbook" version="5.0"
|
|
xml:id="manual.intro.setup.prereq" xreflabel="Prerequisites">
|
|
<?dbhtml filename="prerequisites.html"?>
|
|
|
|
<info><title>Prerequisites</title>
|
|
<keywordset>
|
|
<keyword>ISO C++</keyword>
|
|
<keyword>Prerequisites</keyword>
|
|
</keywordset>
|
|
</info>
|
|
|
|
|
|
|
|
<para>
|
|
Because libstdc++ is part of GCC, the primary source for
|
|
installation instructions is
|
|
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/install/">the GCC install page</link>.
|
|
In particular, list of prerequisite software needed to build the library
|
|
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/install/prerequisites.html">
|
|
starts with those requirements.</link> The same pages also list
|
|
the tools you will need if you wish to modify the source.
|
|
</para>
|
|
|
|
<para>
|
|
Additional data is given here only where it applies to libstdc++.
|
|
</para>
|
|
|
|
<para>As of GCC 4.0.1 the minimum version of binutils required to build
|
|
libstdc++ is <code>2.15.90.0.1.1</code>.
|
|
Older releases of libstdc++ do not require such a recent version,
|
|
but to take full advantage of useful space-saving features and
|
|
bug-fixes you should use a recent binutils whenever possible.
|
|
The configure process will automatically detect and use these
|
|
features if the underlying support is present.
|
|
</para>
|
|
|
|
<para>
|
|
To generate the API documentation from the sources you will need
|
|
Doxygen, see <link linkend="appendix.porting.doc">Documentation
|
|
Hacking</link> in the appendix for full details.
|
|
</para>
|
|
|
|
<para>
|
|
Finally, a few system-specific requirements:
|
|
</para>
|
|
|
|
<variablelist>
|
|
<varlistentry>
|
|
<term>linux</term>
|
|
|
|
<listitem>
|
|
<para>
|
|
The 'gnu' locale model makes use of <function>iconv</function>
|
|
for character set conversions. The relevant functions are provided
|
|
by Glibc and so are always available, however they can also be
|
|
provided by the separate GNU libiconv library. If GNU libiconv is
|
|
found when GCC is built (e.g., because its headers are installed
|
|
in <filename class="directory">/usr/local/include</filename>)
|
|
then the <filename>libstdc++.so.6</filename> library will have a
|
|
run-time dependency on <filename>libiconv.so.2</filename>.
|
|
If you do not want that run-time dependency then you should do
|
|
one of the following:
|
|
</para>
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>
|
|
Uninstall the libiconv headers before building GCC.
|
|
Glibc already provides <function>iconv</function> so you should
|
|
not need libiconv anyway.
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
<link linkend="https://www.gnu.org/software/libiconv/#downloading">
|
|
Download</link> the libiconv sources and extract them into the
|
|
top level of the GCC source tree, e.g.,
|
|
</para>
|
|
<programlisting>
|
|
wget https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.16.tar.gz
|
|
tar xf libiconv-1.16.tar.gz
|
|
ln -s libiconv-1.16 libiconv
|
|
</programlisting>
|
|
<para>
|
|
This will build libiconv as part of building GCC and link to
|
|
it statically, so there is no <filename>libiconv.so.2</filename>
|
|
dependency.
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
Configure GCC with <option>--with-libiconv-type=static</option>.
|
|
This requires the static <filename>libiconv.a</filename> library,
|
|
which is not installed by default. You might need to reinstall
|
|
libiconv using the <option>--enable-static</option> configure
|
|
option to get the static library.
|
|
</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>
|
|
If GCC 3.1.0 or later on is being used on GNU/Linux, an attempt
|
|
will be made to use "C" library functionality necessary for
|
|
C++ named locale support. For GCC 4.6.0 and later, this
|
|
means that glibc 2.3 or later is required.
|
|
</para>
|
|
|
|
<para>
|
|
If the 'gnu' locale model is being used, the following
|
|
locales are used and tested in the libstdc++ testsuites.
|
|
The first column is the name of the locale, the second is
|
|
the character set it is expected to use.
|
|
</para>
|
|
<programlisting>
|
|
de_DE ISO-8859-1
|
|
de_DE@euro ISO-8859-15
|
|
en_GB ISO-8859-1
|
|
en_HK ISO-8859-1
|
|
en_PH ISO-8859-1
|
|
en_US ISO-8859-1
|
|
en_US.ISO-8859-1 ISO-8859-1
|
|
en_US.ISO-8859-15 ISO-8859-15
|
|
en_US.UTF-8 UTF-8
|
|
es_ES ISO-8859-1
|
|
es_MX ISO-8859-1
|
|
fr_FR ISO-8859-1
|
|
fr_FR@euro ISO-8859-15
|
|
is_IS UTF-8
|
|
it_IT ISO-8859-1
|
|
ja_JP.eucjp EUC-JP
|
|
ru_RU.ISO-8859-5 ISO-8859-5
|
|
ru_RU.UTF-8 UTF-8
|
|
se_NO.UTF-8 UTF-8
|
|
ta_IN UTF-8
|
|
zh_TW BIG5
|
|
</programlisting>
|
|
|
|
<para>Failure to have installed the underlying "C" library
|
|
locale information for any of the above regions means that
|
|
the corresponding C++ named locale will not work: because of
|
|
this, the libstdc++ testsuite will skip named locale tests
|
|
which need missing information. If this isn't an issue, don't
|
|
worry about it. If a named locale is needed, the underlying
|
|
locale information must be installed. Note that rebuilding
|
|
libstdc++ after "C" locales are installed is not necessary.
|
|
</para>
|
|
|
|
<para>
|
|
To install support for locales, do only one of the following:
|
|
</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>install all locales</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>install just the necessary locales</para>
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>with Debian GNU/Linux:</para>
|
|
<para> Add the above list, as shown, to the file
|
|
<code>/etc/locale.gen</code> </para>
|
|
<para> run <code>/usr/sbin/locale-gen</code> </para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>on most Unix-like operating systems:</para>
|
|
<para><code> localedef -i de_DE -f ISO-8859-1 de_DE </code></para>
|
|
<para>(repeat for each entry in the above list) </para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
Instructions for other operating systems solicited.
|
|
</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
|
|
</section>
|