This section covers installing glibc 2 as your primary C library. Any new programs you compile will be linked with this library, unless you use special compile options to link with another version.
If you are are using Redhat or Debian and have downloaded the appropriate rpm or deb files, see the Redhat or Debian installion instructions. You can then skip this section.
This section explains how to compile glibc 2 and add-ons from the sources. You must compile the library if you want to change optimization or configuration options or use a package you do not have the binaries for.
On an i586@133 with 64 MB of RAM, it takes about 3 hours to compile with full libraries with add-ons. On a loaded i686@200, it takes about half an hour.
You need to extract the source from the archives so you can compile it. The best way to do this is:
tar xzf glibc-2.0.6.tar.gz
cd glibc-2.0.6
tar xzf ../glibc-linuxthreads-2.0.6.tar.gz
tar xzf ../glibc-crypt-2.0.6.tar.gz
tar xzf ../glibc-localedata-2.0.6.tar.gz
This will put linuxthreads, crypt, and localedata directories in the
glibc-2.0.6 directory where configure can find these add-ons.
In the glibc-2.0.6
directory, create a directory named compile, and
cd into it. All work will be done in this directory, which will simplify
cleaning up. (The developers have not been very concerned with getting 'make
clean' perfect yet.)
mkdir compile
cd compile
Run ../configure
. To use the add-on packages, you need to specify
them with --enable-add-ons, such as --enable-add-ons=linuxthreads,crypt,localedata.
You probably will also want to specify paths where it will be installed.
To match the standard linux distributions, specify --prefix=/usr. (When
a prefix of /usr
is specified on a linux system, configure knows to
adjust other paths to place libc.so and other important libraries in
/lib
.) The whole configure line would be:
../configure --enable-add-ons=linuxthreads,crypt,localedata --prefix=/usr
To compile and verify, run:
make
make check
Now you need to move some files around to prepare for the new library, whether you are installing from source or binaries. Any new program compiled will be linked to glibc, but old programs which are not statically linked will still depend on libc 5, so you can not just overwrite the old version.
mkdir -p /usr/i486-linuxlibc5/lib
/usr/include
:
mv /usr/include /usr/i486-linuxlibc5/include
mkdir /usr/include
ln -s /usr/src/linux/include/linux /usr/include/linux
ln -s /usr/src/linux/include/asm /usr/include/asm
ln -s /usr/X11R6/include/X11 /usr/include/X11
ln -s /usr/lib/g++-include /usr/include/g++
The links may need adjusting according to your distribution. At least
Slackware puts g++ headers in /usr/local/g++-include
, while Debian
puts the headers in /usr/include/g++
, and links
/usr/lib/g++-include
to /usr/include/g++
. In the later
case, you probably will want to move the original g++ include directory back
to /usr/include
.
/usr/include
or put a link to their
include directories in the /usr/include
. These files and links need
to be restored in order to use the extra libraries properly.
/usr/i486-linuxlibc5/lib
) at the top of your
/etc/ld.so.conf
file. You should have ld.so 1.8.8 or
better installed to avoid getting strange messages once glibc is installed.
mv /usr/lib/libbsd.a /usr/i486-linuxlibc5/lib
mv /usr/lib/libc.a /usr/i486-linuxlibc5/lib
mv /usr/lib/libgmon.a /usr/i486-linuxlibc5/lib
mv /usr/lib/libm.a /usr/i486-linuxlibc5/lib
mv /usr/lib/libmcheck.a /usr/i486-linuxlibc5/lib
mv /usr/lib/libc.so /usr/i486-linuxlibc5/lib
mv /usr/lib/libm.so /usr/i486-linuxlibc5/lib
cp /lib/libm.so.5.* /usr/i486-linuxlibc5/lib
cp /lib/libc.so.5.* /usr/i486-linuxlibc5/lib
libm.so.5
and libc.so.5
should be copied and not moved if
/usr
is a seperate partition from /
, because they are
required by programs used to start linux and must be located on the root
drive partition.
/usr/lib/*.o
files into the new directory.
mv /usr/lib/crt1.o /usr/i486-linuxlibc5/lib
mv /usr/lib/crti.o /usr/i486-linuxlibc5/lib
mv /usr/lib/crtn.o /usr/i486-linuxlibc5/lib
mv /usr/lib/gcrt1.o /usr/i486-linuxlibc5/lib
ldconfig -v
If you are installing glibc from precompiled binaries, you first want to check what is in the package before you install the binaries:
tar -tzvvf glibc-2.0.bin.i386.tar.gz
tar -tzvvf glibc-crypt-2.0.bin.i386.tar.gz
If you are happy with that, you can install glibc with:
cd /
tar -xzf glibc-2.0.bin.i386.tar.gz
tar -xzf glibc-crypt-2.0.bin.i386.tar.gz
ldconfig -v
If you have a different architecture or version, substitute the proper
file names.
The most recent glibc version is generally not available as a binary package, and it is strongly recommended that you run the most recent version to avoid bugs. If you can not build the library yourself, grab a binary package of glibc from one of the distributions that is based on glibc (e.g. RedHat) and install this.
To install the library from source, run as root from the compile/
directory:
make install
ldconfig -v
The final step of the installation (for both binary and source installs)
is to update the gcc specs
file so you can link your programs
properly. To determine which specs file is the one used by gcc, use:
% gcc -v
reading specs from /usr/lib/gcc-lib/i486-unknown-linux/2.7.2.2/specs
gcc version 2.7.2.2
In this case, i486-unknown-linux is the system, and 2.7.2.2 is the version.
You need to copy the /usr/lib/gcc-lib/<system>
to the old
system directory:
cd /usr/lib/gcc-lib/
cp -r i486-unknown-linux i486-linuxlibc5
Change into the original directory and version directory
cd /usr/lib/gcc-lib/i486-unknown-linux/2.7.2.2
and edit the file specs
found in this directory. In this file,
change /lib/ld-linux.so.1
to /lib/ld-linux.so.2
. You
also need to remove all expressions %{...:-lgmon}
in the file,
since glibc does not use the gmon library for profiling. A sample specs
file can be found in the
Sample specs file section.
To test the installation, create the following program in a file glibc.c:
#include <stdio.h>
main()
{
printf("hello world!\n");
}
and compile the program.
% gcc glibc.c -o glibc
Use ldd to verify the program was linked with glibc2, and not your old libc:
% ldd glibc
libc.so.6 => /lib/libc.so.6 (0x4000e000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
If this compiles and generates "hello world!" when run, the
installation was successful.