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:
This will put linuxthreads, crypt, and localedata directories in the glibc-2.0.6 directory where configure can find these add-ons.
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
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.)
Run
mkdir compile cd compile
../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
The links may need adjusting according to your distribution. At least Slackware puts g++ headers in
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++
/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:
If you are happy with that, you can install glibc with:
tar -tzvvf glibc-2.0.bin.i386.tar.gz tar -tzvvf glibc-crypt-2.0.bin.i386.tar.gz
If you have a different architecture or version, substitute the proper file names.
cd / tar -xzf glibc-2.0.bin.i386.tar.gz tar -xzf glibc-crypt-2.0.bin.i386.tar.gz ldconfig -v
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:
and compile the program.
#include <stdio.h> main() { printf("hello world!\n"); }
Use ldd to verify the program was linked with glibc2, and not your old libc:
% gcc glibc.c -o glibc
If this compiles and generates "hello world!" when run, the installation was successful.
% ldd glibc libc.so.6 => /lib/libc.so.6 (0x4000e000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)