222bb619fb
2001-02-06 Phil Edwards <pme@sources.redhat.com> * docs/html/configopts.html: Fix HTML markup. * docs/html/install.html: Bring up to date. * docs/html/17_intro/C++STYLE: Add global variable conventions. * docs/html/21_strings/howto.html: More notes. * docs/html/22_locale/howto.html: Fix HTML markup. * docs/html/27_io/howto.html: More notes. * docs/html/27_io/binary_iostreams_kanze.txt: New file. * docs/html/27_io/binary_iostreams_kuehl.txt: New file. From-SVN: r39503
345 lines
14 KiB
HTML
345 lines
14 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
|
|
<HTML>
|
|
<HEAD>
|
|
<META NAME="AUTHOR" CONTENT="pme@sources.redhat.com (Phil Edwards)">
|
|
<META NAME="KEYWORDS" CONTENT="libstdc++, libstdc++-v3, GCC, g++">
|
|
<META NAME="DESCRIPTION" CONTENT="README for the GNU libstdc++ effort.">
|
|
<META NAME="GENERATOR" CONTENT="vi and eight fingers">
|
|
<TITLE>libstdc++-v3 Installation Instructions</TITLE>
|
|
<LINK REL=StyleSheet HREF="lib3styles.css">
|
|
<!-- $Id: install.html,v 1.3 2001/01/23 17:02:26 pme Exp $ -->
|
|
</HEAD>
|
|
<BODY>
|
|
|
|
<H1 CLASS="centered"><A NAME="top">libstdc++-v3 INSTALL</A></H1>
|
|
|
|
<P>The latest version of this document is always available at
|
|
<A HREF="http://gcc.gnu.org/onlinedocs/libstdc++/install.html">
|
|
http://gcc.gnu.org/onlinedocs/libstdc++/install.html</A>.
|
|
</P>
|
|
|
|
<P>To the <A HREF="http://gcc.gnu.org/libstdc++/">libstdc++-v3 homepage</A>.
|
|
|
|
|
|
<!-- ####################################################### -->
|
|
<HR>
|
|
<H2>Contents</H2>
|
|
<UL>
|
|
<LI><A HREF="#prereqs">Tools you will need beforehand</A>
|
|
<LI><A HREF="#srcsetup">Setting up the source directories</A>
|
|
<LI><A HREF="#config">Configuring</A>
|
|
<LI><A HREF="#install">Building and installing the library</A>
|
|
<LI><A HREF="#postinstall">Post-installation</A>
|
|
<LI><A HREF="#usage">Using the library</A>
|
|
</UL>
|
|
|
|
<HR>
|
|
|
|
<!-- ####################################################### -->
|
|
|
|
<H2><A NAME="prereqs">Tools you will need beforehand</A></H2>
|
|
<P>You will need a recent version of g++ to compile the snapshot of
|
|
libstdc++, one of the post-2.95.2 GCC
|
|
snapshots (insert standard caveat about using snapshots rather
|
|
than formal releases). You will need the full source
|
|
distribution to whatever compiler release you are using. The
|
|
GCC snapshots can be had from one of the sites on their
|
|
<A HREF="http://gcc.gnu.org/mirrors.html">mirror list</A>.
|
|
</P>
|
|
|
|
<P>In addition, if you plan to modify the makefiles or regenerate
|
|
the configure scripts you'll need the nuevo automake, libtool
|
|
and autoconf to regenerate the Makefiles and configure
|
|
scripts. These tools are all required to be installed in the
|
|
same location (most linux distributions install these tools by
|
|
default, so no worries.)
|
|
</P>
|
|
|
|
<P>If you don't have bash, and want to run <TT>'make check'</TT> to
|
|
test your build, you'll need to get bash 2.x. Also recommended
|
|
is GNU Make, since it is the only 'make' that will parse these
|
|
makefiles correctly. We are moving to DejaGNU, so you'll
|
|
probably want to get that.
|
|
</P>
|
|
|
|
<P>As of June 19, 2000, libstdc++ attempts to use tricky and
|
|
space-saving features of the GNU toolchain, enabled with
|
|
<TT>-ffunction-sections -fdata-sections -Wl,--gc-sections</TT>.
|
|
To obtain maximum benefit from this, binutils after this date
|
|
should also be used (bugs were fixed with C++ exception handling
|
|
related to this change in libstdc++-v3). The version of these
|
|
tools should be <TT>2.10.90</TT>, and you can get snapshots (as
|
|
well as releases) of binutils
|
|
<A HREF="ftp://sources.redhat.com/pub/binutils">here</A>.
|
|
</P>
|
|
|
|
<P>Finally, a few system-specific requirements:
|
|
<DL>
|
|
<DT>Cygwin
|
|
<DD>If you are using Cygwin to compile libstdc++-v3 on Win32, you'll
|
|
have to get a version of the cygwin1.dll that is dated on or
|
|
after February 1, 2000. This is necessary to successfully run
|
|
the script "mknumeric_limits" which probes the
|
|
floating-point
|
|
environment of the host in question -- before this date, Cygwin
|
|
would freeze when running this script. In addition, you may
|
|
want to get a current version of libtool (say libtool-1.3.4
|
|
and above) as earlier versions supposedly had problems creating
|
|
shared libraries.
|
|
|
|
</DL>
|
|
</P>
|
|
|
|
<HR>
|
|
|
|
<H2><A NAME="srcsetup">Setting up the source directories</A></H2>
|
|
<P><EM>As the libstdc++-v3 sources and the core GCC sources have
|
|
converged, more and more effort goes to building the
|
|
library as the default version to be shipped with g++. With the
|
|
2.90.8 snapshot, and especially for CVS versions after this
|
|
release, this is treated as the usual scenario. If you want to
|
|
build the library all by itself, you will need to explicitly
|
|
disable certain features (like namespaces) since the core GCC
|
|
library, libgcc.a, will not be rebuilt with those same features.
|
|
</EM>
|
|
</P>
|
|
|
|
<P>By default, all configurations of libstdc++-v3 now have namespaces
|
|
enabled. Being able to select/de-select this option was a complex task
|
|
that had hopelessly confused many otherwise intelligent people, and
|
|
provided an endless stream of silent cursing and cries for help.
|
|
Because of this, gcc sources are required, and are no longer optional.
|
|
</P>
|
|
|
|
<P>The following definitions will be used throughout the rest of this
|
|
document:
|
|
<UL>
|
|
<LI><EM>gccsrcdir</EM>: The directory holding the source of the
|
|
compiler. It should have several subdirectories like
|
|
<EM>gccsrcdir</EM>/libio and <EM>gccsrcdir</EM>/gcc.
|
|
<LI><EM>libsrcdir</EM>: The directory holding the source of the
|
|
C++ library.
|
|
<LI><EM>gccbuilddir</EM>: The build directory for the compiler
|
|
in <EM>gccsrcdir</EM>. GCC requires that it be built in
|
|
a different directory than its sources.
|
|
<LI><EM>libbuilddir</EM>: The build directory for libstdc++.
|
|
<LI><EM>destdir</EM>: The eventual installation directory for
|
|
the compiler/libraries, set with the --prefix option to
|
|
the configure script.
|
|
</UL>
|
|
Note:
|
|
<OL>
|
|
<LI>The .91 snapshot and following are intended to replace the
|
|
library that comes with the compiler, so <EM>libsrcdir</EM>
|
|
and <EM>libbuilddir</EM> must be contained under
|
|
<EM>gccsrcdir</EM> and <EM>gccbuilddir</EM>, respectively.
|
|
<LI>The source, build, and installation directories should
|
|
not be parents of one another; i.e., these should all be
|
|
separate directories. Please don't build out of the
|
|
source directory.
|
|
</OL>
|
|
</P>
|
|
|
|
<P>Since the release of libstdc++-2.90.8, configuration patches have gone
|
|
into CVS gcc that make the management of the various libstdc++ source
|
|
trees a bit easier. Because of this, both libstdc++-v2 and
|
|
libstdc++-v3 and live together in peace, without the need
|
|
for soft linking. The setup instructions are slightly different,
|
|
depending on whether you want to use CVS gcc or a snapshot. Please
|
|
choose the appropriate scenario:
|
|
</P>
|
|
|
|
<P><B>...with a gcc-2.9[67] snapshot</B>
|
|
<P>Unpack the <EM>gccsrcdir</EM> and go into that directory. For
|
|
instance, <TT>gcc-2.95.2</TT> is a valid <EM>gccsrcdir</EM>.
|
|
Once in <EM>gccsrcdir</EM>, you'll need to rename or delete
|
|
the libstdc++-v3 directory which comes with that snapshot:
|
|
<PRE>
|
|
mv libstdc++-v3 libstdc++-v3-previous <STRONG>[OR]</STRONG>
|
|
rm -r libstdc++-v3</PRE>
|
|
</P>
|
|
<P>Next, unpack the libstdc++-v3 library tarball into the
|
|
<EM>gccsrcdir</EM> directory; it will create a
|
|
<EM>libsrcdir</EM> called <TT>libstdc++-<EM>version</EM></TT>:
|
|
<PRE>
|
|
gzip -dc libstdc++-version.tar.gz | tar xf -</PRE>
|
|
</P>
|
|
<P>Finally, make a soft link between <EM>libsrcdir</EM> and
|
|
<TT>libstdc++-v3</TT> so that libstdc++-v3 will be the default C++
|
|
library used.
|
|
<PRE>
|
|
ln -s <EM>libsrcdir</EM> libstdc++-v3</PRE>
|
|
</P>
|
|
</P>
|
|
|
|
<P><B>...with CVS gcc</B>
|
|
<P>Check out or download the gcc sources: the resulting source
|
|
directory is <EM>gccsrcdir</EM>. Once in <EM>gccsrcdir</EM>,
|
|
you'll need to rename or delete the libstdc++-v3 directory
|
|
which comes with that snapshot:
|
|
<PRE>
|
|
mv libstdc++-v3 libstdc++-v3-previous <STRONG>[OR]</STRONG>
|
|
rm -r libstdc++-v3</PRE>
|
|
</P>
|
|
<P>Next, unpack the libstdc++-v3 library tarball into this
|
|
<EM>gccsrcdir</EM> directory; it will create a
|
|
<EM>libsrcdir</EM> called <TT>libstdc++-<EM>version</EM></TT>:
|
|
<PRE>
|
|
gzip -dc libstdc++-version.tar.gz | tar xf -</PRE>
|
|
</P>
|
|
<P>Finally, rename <EM>libsrcdir</EM> to <TT>libstdc++-v3</TT> so that
|
|
gcc's configure flags will be able to deal with the new library.
|
|
<PRE>
|
|
mv <EM>libsrcdir</EM> libstdc++-v3</PRE>
|
|
</P>
|
|
</P>
|
|
|
|
|
|
<HR>
|
|
<H2><A NAME="config">Configuring</A></H2>
|
|
<P>If you have never done this before, you should read the basic
|
|
<A HREF="http://gcc.gnu.org/install/">GCC Installation
|
|
Instructions</A> first.
|
|
</P>
|
|
<P>Due to namespaces, when building libstdc++-v3 you'll have to configure
|
|
the entire <EM>gccsrcdir</EM> directory. The full list of libstdc++-v3
|
|
specific configuration options, not dependent on the specific compiler
|
|
release being used, can be found <A HREF="configopts.html">here</A>.
|
|
</P>
|
|
<P>Consider possibly using --enable-languages=c++ to save time by only
|
|
building the C++ language parts.
|
|
</P>
|
|
|
|
<P><PRE>
|
|
cd <EM>gccbuilddir</EM>
|
|
<EM>gccsrcdir</EM>/configure --prefix=<EM>destdir</EM> --other-opts...</PRE>
|
|
</P>
|
|
|
|
|
|
<HR>
|
|
<H2><A NAME="install">Building and installing the library</A></H2>
|
|
<P>Now you have a few options:</P>
|
|
<H3>[re]building <EM>everything</EM></H3>
|
|
<P>If you're building GCC from scratch, you can do the usual
|
|
<TT> 'make bootstrap' </TT> here, and libstdc++-v3 will be built
|
|
as its default C++ library. The generated g++ will magically
|
|
use the correct headers, link against the correct library
|
|
binary, and in general using libstdc++-v3 will be a piece of
|
|
cake. You're done; run <TT>'make install'</TT> (see the GCC
|
|
installation instructions) to put the new compiler and libraries
|
|
into place.
|
|
</P>
|
|
|
|
<H3>[re]building only libstdc++</H3>
|
|
<P>To rebuild just libstdc++, use:
|
|
<PRE>
|
|
make all-target-<EM>libstdc++-v3</EM></PRE>
|
|
This will configure and build the C++ library in the
|
|
<EM>gccbuilddir/cpu-vendor-OS/</EM>libstdc++ directory.
|
|
</P>
|
|
<P>If you are rebuilding from a previous build [attempt], some
|
|
information is kept in a cache file. This is stored in
|
|
<EM>gccbuilddir/cpu-vendor-OS/</EM> if you are building with
|
|
multilibs (the default), or in
|
|
<EM>gccbuilddir/cpu-vendor-OS/</EM>libstdc++-v3 if you have
|
|
multilibs disabled. The filename is config.cache; if previous
|
|
information is causing problems, you can delete it entirely, or
|
|
simply edit it and remove lines.
|
|
</P>
|
|
<P>You're done. Now install the rebuilt pieces with
|
|
<PRE>
|
|
make install</PRE>
|
|
or
|
|
<PRE>
|
|
make install-gcc
|
|
make install-target-libstdc++-v3</PRE>
|
|
</P>
|
|
|
|
|
|
<HR>
|
|
<H2><A NAME="postinstall">Post-installation</A></H2>
|
|
<P>Installation will create the <EM>destdir</EM> directory and
|
|
populate it with subdirectories:
|
|
<PRE>
|
|
lib/
|
|
include/g++-v3/
|
|
bits/
|
|
ext/
|
|
CPU-vendor-OS/include/g++-v3/
|
|
bits/
|
|
ext/</PRE>
|
|
</P>
|
|
<P>You can check the status of the build without installing it using
|
|
<PRE>
|
|
make check</PRE>
|
|
or you can check the status of the installed library using
|
|
<PRE>
|
|
make check-install</PRE>
|
|
in the <EM>libbuilddir</EM> directory.
|
|
These commands will create a 'testsuite' directory underneath
|
|
<EM>libbuilddir</EM> containing the results of the tests. We are
|
|
interested in any strange failures of the testsuite; please see
|
|
<A HREF="faq/index.html#2_4">FAQ 2.4</A> for which files to examine.
|
|
</P>
|
|
|
|
|
|
<HR>
|
|
<H2><A NAME="usage">Using the library</A></H2>
|
|
<LI><B>Find the new library at runtime (shared linking only)</B>
|
|
<P>If you only built a static library (libstdc++.a), or if you
|
|
specified static linking, you don't have to worry about this.
|
|
But if you built a shared library (libstdc++.so) and linked
|
|
against it, then you will need to find that library when you
|
|
run the executable.
|
|
</P>
|
|
<P>Methods vary for different platforms and different styles, but
|
|
the usual ones are printed to the screen during installation.
|
|
They include:
|
|
<UL>
|
|
<LI>At runtime set LD_LIBRARY_PATH in your environment correctly,
|
|
so that the shared library for libstdc++ can be found and
|
|
loaded. Be certain that you understand all of the other
|
|
implications and behavior of LD_LIBRARY_PATH first (few
|
|
people do, and they get into trouble).
|
|
<LI>Compile the path to find the library at runtime into the
|
|
program. This can be done by passing certain options to g++,
|
|
which will in turn pass them on to the linker. The exact
|
|
format of the options is dependent on which linker you use:
|
|
<UL>
|
|
<LI>GNU ld (default on Linux):<TT> -Wl,--rpath,<EM>destdir</EM>/lib</TT>
|
|
<LI>IRIX ld:<TT> -Wl,-rpath,<EM>destdir</EM>/lib</TT>
|
|
<LI>Solaris ld:<TT> -Wl,-R<EM>destdir</EM>/lib</TT>
|
|
<LI>More...?
|
|
</UL>
|
|
</UL>
|
|
</P>
|
|
<P>Use the <TT>ldd(1)</TT> utility to show which library the system
|
|
thinks it will get at runtime.
|
|
</P>
|
|
</OL>
|
|
</P>
|
|
|
|
|
|
<!--
|
|
<HR>
|
|
<H2><A NAME=""></A></H2>
|
|
<P>
|
|
</P>
|
|
|
|
-->
|
|
|
|
<!-- ####################################################### -->
|
|
|
|
<HR>
|
|
<P CLASS="fineprint"><EM>
|
|
Comments and suggestions are welcome, and may be sent to
|
|
<A HREF="mailto:pme@sources.redhat.com">Phil Edwards</A> or
|
|
<A HREF="mailto:gdr@gcc.gnu.org">Gabriel Dos Reis</A>.
|
|
<BR> $Id: install.html,v 1.3 2001/01/23 17:02:26 pme Exp $
|
|
</EM></P>
|
|
|
|
|
|
</BODY>
|
|
</HTML>
|
|
|