Linuxdoc Linux Questions
Click here to ask our community of linux experts!
Custom Search
Next Previous Contents

5. Installing as the primary C library.

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.

5.1 Building the library from source.

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.

Prerequisites.

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.

Extracting the source.

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.

Configuring.

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

Compiling.

To compile and verify, run:

 make
 make check
 

5.2 Preparing for installation.

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.

  1. Create a new directory to hold the old files to:
     mkdir -p /usr/i486-linuxlibc5/lib
     
    
    
  2. The old header files must be evacuated from /usr/include:
     mv /usr/include /usr/i486-linuxlibc5/include
     
    
    
  3. Create a new include directory and set up the links to other include directories:
     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.
  4. Restore any extra header files and links. Some non-standard libraries such as ncurses put files in /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.
  5. Add your new library directory (such as /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.
  6. Move/copy all the old C libraries into the new directory.
     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.
  7. Move the /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
     
    
    
  8. Update your library cache after your libraries are moved.
     ldconfig -v
     
    
    

5.3 Installing from the binary package.

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.

5.4 Installing from the source.

To install the library from source, run as root from the compile/ directory:

 make install
 ldconfig -v
 

5.5 Updating the gcc specs.

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.

5.6 Testing your installation.

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.
Next Previous Contents