Linux Zone

| HowTo Linux Zone | Linux Zone Home | E-Mail Me |

Glibc 2 HOWTO


Eric Green, ejg3@cornell.edu

v1.5, 8 February 1998

The glibc 2 HOWTO covers installing and using the GNU C Library ver-

sion 2 (libc 6) on Linux systems.

______________________________________________________________________

Table of Contents

1. Introduction.

1.1 About glibc 2.

1.2 About this document.

1.3 Recent changes in this document.

2. Choosing your installation method.

3. Getting the library.

4. Installing as a test library.

4.1 Compiling and installing.

4.1.1 Prerequisites.

4.1.2 Extracting the source.

4.1.3 Configuring.

4.1.4 Compiling and installing.

4.2 Updating the dynamic loader.

4.3 Configuring for gcc.

4.4 Updating header file links.

4.5 Testing your installation.

5. Installing as the primary C library.

5.1 Building the library from source.

5.1.1 Prerequisites.

5.1.2 Extracting the source.

5.1.3 Configuring.

5.1.4 Compiling.

5.2 Preparing for installation.

5.3 Installing from the binary package.

5.4 Installing from the source.

5.5 Updating the gcc specs.

5.6 Testing your installation.

6. Compiling with the non-primary libc.

6.1 A warning when using non-primary libcs.

6.2 Compiling programs with a test glibc.

6.3 Compiling programs with libc 5 when glibc is primary library.

7. Compiling C++ programs.

7.1 Installing libg++ for a test glibc install.

7.2 Installing libg++ for a primary glibc install.

7.3 Compiling C++ programs with the non-primary libc.

8. Reporting bugs.

9. Sample specs file.

10. Miscellanea.

10.1 Further information.

10.1.1 Web pages.

10.1.2 Newgroups.

10.1.3 Mailing lists.

10.2 Credits.

10.3 Feedback.

10.4 Copyright.

 

______________________________________________________________________

 

 

1. Introduction.

 

 

1.1. About glibc 2.

 

Glibc 2 is the latest version of the GNU C Library. It currently runs

unmodified on GNU Hurd systems and Linux i386, m68k, and alpha

systems. Support for Linux PowerPC, MIPS, Sparc, Sparc 64, and Arm

will be in version 2.1. In the future support for other architectures

and operating systems will be added.

On Linux, glibc 2 is used as the libc with major version 6, the

successor of the Linux libc 5. It is intended by the Linux libc

developers to eventually replace libc 5. As of 2.0.6, glibc is

considered production quality. Version 2.1 (due out in the near

future) will be ready for main stream use along with adding more ports

and features.

There are three optional add-ons available for glibc 2:

Crypt

The UFC-crypt package. It is seperate because of export

restrictions.

LinuxThreads

An implementation of the Posix 1003.1c "pthread" interface.

Locale data

Contains the data needed to build the locale data files to use

the internationalization features of the glibc.

The crypt and LinuxThreads add-ons are strongly recommended... not

using them risks to be incompatible with the libraries of other

systems. (If you do not wish to use them, you must add the option

--disable-sanity-checks when you run configure.)

 

1.2. About this document.

 

This HOWTO covers installing the glibc 2 library on an existing Linux

system. It is tailored for users of Intel based systems currently

using libc 5, but users of other systems and alternate libraries (such

as glibc 1) should be able to use this information by substituting the

proper filenames and architecture names in the appropriate places.

The latest copy of this HOWTO can be found as part of the Linux

Documentation Project <http://sunsite.unc.edu/LDP> or from

<http://www.imaxx.net/~thrytis/glibc/Glibc2-HOWTO.html>.

 

1.3. Recent changes in this document.

 

Differences between version 1.5 and 1.4:

o Indexing added Ed Bailey.

o Changed my email address.

Differences between version 1.4 and 1.3:

o Changed current status from experimental to production.

o Updated list of developmental ports.

o Updated latest version to 2.0.6.

 

 

2. Choosing your installation method.

 

There are a few ways to install glibc. You can install the libraries

as a test, using the existing libraries as the default but letting you

try the new libraries by using different options when compiling your

program. Installing in this way also makes it easy to remove glibc in

the future (though any program linked with glibc will no longer work

after the libraries are removed). Using glibc as a test library

requires you to compile the libraries from source. There is no binary

distribution for installing libraries this way. This installation is

described in ``Installing as a test library''.

The other way described in this document to install is using glibc as

your primary library. All new programs that you compile on your

system will use glibc, though you can link programs with your old

libraries using different options while compiling. You can either

install the libraries from binaries, or compile the library yourself.

If you want to change optimization or configuration options, or use an

add-on which is not distributed as a binary package, you must get the

source distribution and compile. This installation procedure is

described in ``Installing as the primary C library''.

Frodo Looijaard describes yet another way of installing glibc. His

method involves installing glibc as a secondary library and setting up

a cross compiler to compile using glibc. The installation procedure

for this method is more complicated then the test library install

described in this document, but allows for easier compiling when

linking to glibc. This method is described in his Installing glibc-2

on Linux <http://huizen.dds.nl/~frodol/glibc/> document.

If you are currently running Debian 1.3 but do not want to upgrade to

the unstable version of Debian to use glibc, the Debian libc5 to libc6

Mini-HOWTO <http://www.gate.net/~storm/FAQ/libc5-libc6-Mini-

HOWTO.html> describes how to use Debian packages to upgrade your

system.

If you are installing glibc 2 on an important system, you might want

to use the test install. Even if there are no bugs, some programs

will need to be modified before they will compile due to changes in

function prototypes and types.

 

 

3. Getting the library.

 

The glibc 2 consists of the glibc package and three optional add-on

packages, LinuxThreads, Locale, and Crypt. The source can be found at

o <ftp://prep.ai.mit.edu/pub/gnu/glibc-2.0.6.tar.gz>

o <ftp://prep.ai.mit.edu/pub/gnu/glibc-linuxthreads-2.0.6.tar.gz>

o <ftp://prep.ai.mit.edu/pub/gnu/glibc-localedata-2.0.6.tar.gz>

o <ftp://prep.ai.mit.edu/pub/gnu/glibc-crypt-2.0.6.tar.gz>

It will take about 150 MB of disk space for the full compile and

install. The basic binary install of just the core library package is

about 50 MB.

Binary packages for 2.0.6 are not available. Version 2.0.4 binary

packages are available for i386 and m68k, and version 2.0.1 for the

alpha can be found at

o Intel x86:

o <ftp://prep.ai.mit.edu/pub/gnu/glibc-2.0.4.bin.i386.tar.gz>

o <ftp://prep.ai.mit.edu/pub/gnu/glibc-crypt-2.0.4.bin.i386.tar.gz>

o Alpha:

o <ftp://prep.ai.mit.edu/pub/gnu/glibc-2.0.1.bin.alpha-linux.tar.gz>

o <ftp://prep.ai.mit.edu/pub/gnu/glibc-crypt-2.0.1.bin.alpha-

linux.tar.gz>

o m68k:

o <ftp://prep.ai.mit.edu/pub/gnu/glibc-2.0.4-m68k-linux.bin.tar.gz>

o <ftp://prep.ai.mit.edu/pub/gnu/glibc-crypt-2.0.4-m68k-

linux.bin.tar.gz>

There are export restrictions on the crypt add-on. Non-US users

should get it from <ftp://ftp.ifi.uio.no/pub/gnu>.

If you are running a Red Hat distribution, you can get rpms for glibc

2 from <ftp://ftp.redhat.com/pub/redhat/>. Glibc 2 is the primary C

library for the new Red Hat distribution 5.0.

If you are running a Debian distribution, you can get the packages for

glibc 2 from <ftp://ftp.debian.org/debian/dists/unstable/main/>. The

files are named libc6. Glibc 2 is now part of the base package of the

hamm version of Debian, and will be the primary libc when Debian 2.0

is released.

 

 

4. Installing as a test library.

 

This section covers installing glibc 2 as a test library. Anything

you compile will be linked to your existing libraries unless you give

some extra parameters to link to the new libraries. It appears that

the paths are compiled into quite a few files, so you probably have to

install the library from source.

 

4.1. Compiling and installing.

 

 

4.1.1. Prerequisites.

 

 

o About 150 MB free disk space

o GNU make 3.75

o gcc >= 2.7.2 (better 2.7.2.1)

 

o binutils 2.8.1 (for alpha you need a snapshot)

o bash 2.0

o autoconf 2.12 (if you change configure.in)

o texinfo 3.11

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.

 

4.1.2. 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.

 

4.1.3. 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=linux-

threads,crypt,localedata. You also need to choose a destination

directory to install to. /usr/i486-linuxglibc2 is a good choice. The

configure line for this would be:

 

../configure --enable-add-ons=linuxthreads,crypt,localedata --prefix=/usr/i486-linuxglibc2

 

 

 

 

 

 

 

4.1.4. Compiling and installing.

 

To compile and verify, run:

 

make

make check

 

 

 

 

If the 'make check' succeeds, install the library:

 

make install

 

 

 

 

 

4.2. Updating the dynamic loader.

 

 

1. Create a link from the new ld.so to /lib/ld-linux.so.2:

 

ln -s /usr/i486-linuxglibc2/lib/ld-linux.so.2 /lib/ld-linux.so.2

 

 

 

 

This is the only library where the location is fixed once a program is

linked, and using a link in /lib will ease upgrading to glibc as your

primary C library when the stable version is released.

2. Edit /etc/ld.so.conf. You need to add path to the lib directory

the new libraries reside in at the end of the file, which will be

<prefix>/lib, such as /usr/i486-linuxglibc2/lib for the choice

above. After you have modified /etc/ld.so.conf, run

 

ldconfig -v

 

 

 

 

 

4.3. Configuring for gcc.

The last step of installation is updating /usr/lib/gcc-lib so gcc

knows how to use the new libraries. First you need to duplicate the

existing configuration. To find out which configuration is current,

use the -v option of gcc:

 

% 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 new

test system directory:

 

cd /usr/lib/gcc-lib/

cp -r i486-unknown-linux i486-linuxglibc2

 

 

 

 

Change into your new test system directory and version directory

 

cd /usr/lib/gcc-lib/i486-linuxglibc2/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.

 

4.4. Updating header file links.

 

You need create links in your new include directory to other include

directories:

 

cd /usr/i486-linuxglibc2/include

ln -s /usr/src/linux/include/linux

ln -s /usr/src/linux/include/asm

ln -s /usr/X11R6/include/X11

 

 

 

 

You might also have other libraries such as ncurses which need their

header files put in this directory. You should copy or link the files

from /usr/include. (Some libraries may need to be recompiled with

glibc2 in order to work with it. In these cases, just compile and

install the package to /usr/i486-linuxglibc2.)

 

4.5. 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 with the options of "-b <base install directory> -nostdinc

-I<install directory>/include -I/usr/lib/gcc-lib/<new system dir>/<gcc

version>/include":

 

% gcc -b i486-linuxglibc2 -nostdinc -I/usr/i486-linuxglibc2/include -I/usr/lib/gcc-lib/i486-linuxglibc2/2.7.2.2/include glibc.c -o glibc

 

 

 

 

Use ldd to verify the program was linked with glibc2, and not your old

libc:

 

% ldd glibc

libc.so.6 => /usr/i486-linuxglibc2/lib/libc-2.0.6.so (0x4000d000)

/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

 

 

 

 

If it compiles, the links check out, and it generates "hello world!"

when run, the installation succeeded.

 

 

 

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.

 

5.1.1. Prerequisites.

 

 

o About 150 MB free disk space

o GNU make 3.75

o gcc >= 2.7.2 (better 2.7.2.1)

o binutils 2.8.1 (for alpha you need a snapshot)

o bash 2.0

 

o autoconf 2.12 (if you change configure.in)

o texinfo 3.11

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.

 

5.1.2. 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.

 

5.1.3. 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=linux-

threads,crypt,localedata. You probably will also want to specify

paths where it will be installed. To match the standard linux distri-

butions, 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

 

 

 

 

5.1.4. 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 must:

 

cd /

gzip -dc glibc-2.0.bin.i386.tar.gz | tar tvvf -

gzip -dc glibc-crypt-2.0.bin.i386.tar.gz | tar tvvf -

ldconfig -v

 

 

 

 

If you have a different architecture or version, substitute the proper

file names.

 

 

5.4. Installing from the source.

 

To install the library from source, run:

 

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 installa-

tion was successful.

 

 

 

6. Compiling with the non-primary libc.

 

There are times you will want to use an alternate library to compile

your programs with. This section explains how to accomplish this,

using the directories and installation names used in the examples in

the previous two sections. Remember to change the names to fit your

setup.

 

6.1. A warning when using non-primary libcs.

Before compiling any programs which is used in the system boot

process, remember that if the program is dynamically linked and is

used before the non-root partitions are mounted, all linked libraries

must be on the root partition. Following the installation process in

the previous section for installing glibc as your primary C library,

the old libc is left in /lib, which will be on your root partition.

This means all of your programs will still work during booting.

However, if /usr is on a different partition and you install glibc as

a test library in /usr/i486-linuxglibc2, any new programs you compile

with glibc will not work until your /usr partition is mounted.

 

6.2. Compiling programs with a test glibc.

To compile a program with a test-install glibc, you need to reset the

include paths to point to the glibc includes. Specifying "-nostdinc"

will negate the normal paths, and "-I/usr/i486-linuxglibc2/include"

will point to the glibc includes. You will also need to specify the

gcc includes, which are found in /usr/lib/gcc-

lib/i486-linuxglibc2/2.7.2.2/include (assuming you installed the test

lib in i486-linuxglibc2 with gcc version 2.7.2.2).

To link a program with a test-install glibc, you need to specify the

gcc setup. This is done by using the option "-b i486-linuxglibc2".

For most programs, you can specify these new options by adding them to

the $CFLAGS and $LDFLAGS makefile options:

 

CFLAGS = -nostdinc -I/usr/i486-linuxglibc2/include -I/usr/lib/gcc-lib/i486-linuxglibc2/2.7.2.2/include -b i486-linuxglibc2

LDFLAGS = -b i486-linuxglibc2

 

 

 

 

If you are using a configure script, define the $CFLAGS and $LDFLAGS

shell variables (by using env/setenv for csh/tcsh, or set/export for

sh/bash/etc) before running configure. The makefiles generated by

this should contain the proper $CFLAGS and $LDFLAGS. Not all config-

ure scripts will pick up the variables, so you should check after run-

ning configure and edit the makefiles by hand if necessary.

If the programs you are compiling only call gcc (and not cpp or

binutils directly), you can use the following script to save having to

specify all of the options each time:

 

#!/bin/bash

/usr/bin/gcc -b i486-linuxglibc2 -nostdinc \

-I/usr/i486-linuxglibc2/include \

-I/usr/lib/gcc-lib/i486-linuxglibc2/2.7.2.2/include "$@"

 

 

 

 

You can then use this script instead of "gcc" when compiling.

 

6.3. Compiling programs with libc 5 when glibc is primary library.

To compile a program with your old libraries when you have installed

glibc as your main library, you need to reset the include paths to the

old includes. Specifying "-nostdinc" will negate the normal paths,

and "-I/usr/i486-linuxlibc5/include" will point to the glibc includes.

You must also specify "-I/usr/lib/gcc-

lib/i486-linuxlibc5/2.7.2.2/include" to include the gcc specific

includes. Remember to adjust these paths based on the what you named

the new directories and your gcc version.

To link a program with your old libc, you need to specify the gcc

setup. This is done by using the option "-b i486-linuxlibc5".

 

For most programs, you can specify these new options by appending them

to the $CFLAGS and $LDFLAGS makefile options:

 

CFLAGS = -nostdinc -I/usr/i486-linuxlibc5/include -I/usr/lib/gcc-lib/i486-linuxlibc5/2.7.2.2/include -b i486-linuxlibc5

LDFLAGS = -b i486-linuxlibc5

 

 

 

 

If you are using a configure script, define the $CFLAGS and $LDFLAGS

shell variables (by using env/setenv for csh/tcsh, or set/export for

sh/bash/etc) before running configure. The makefiles generated by

this should contain the proper $CFLAGS and $LDFLAGS. Not all config-

ure scripts will pick up the variables, so you should check after run-

ning configure and edit the makefiles by hand if necessary.

If the programs you are compiling only call gcc (and not cpp or

binutils directly), you can use the following script to save having to

specify all of the options each time:

 

#!/bin/bash

/usr/bin/gcc -b i486-linuxlibc5 -nostdinc \

-I/usr/i486-linuxlibc5/include \

-I/usr/lib/gcc-lib/i486-linuxlibc5/2.7.2.2/include "$@"

 

 

 

 

You can then use this script instead of "gcc" when compiling.

 

 

7. Compiling C++ programs.

 

Libg++ uses parts of the math library, so is link to libm. Since your

existing libg++ will be compiled with your old library, you will have

to recompile libg++ with glibc or get a binary copy. The latest

source for libg++ along with a binary linked with glibc (for x86) can

be found at <ftp://ftp.yggdrasil.com/private/hjl/>.

 

7.1. Installing libg++ for a test glibc install.

If you have installed glibc as a test library, you need to install the

files into the directory you installed glibc into (such as

/usr/i486-linuxglibc2 for the example in the previous sections). If

you are installing from the binary package (which i would recommend,

since i never had any luck compiling libg++ this way), you need to

extract the files into a temporary directory and move all the usr/lib/

files into the <install directory>/lib/ directory, the usr/include/

files into the <install directory>/include/ directory (remember to

delete your include/g++ link first!), and the usr/bin/ files into the

<install directory>/bin/ directory.

 

7.2. Installing libg++ for a primary glibc install.

If you have installed glibc as the primary library, you first need to

move your old libg++ files into your old libc directory if you still

want to be able to compile g++ programs with your old libc. Probably

the easiest way to do this is by installing a new copy of the libg++

compiled with libc 5 as in the previous section, and then installing

the glibc version normally.

 

7.3. Compiling C++ programs with the non-primary libc.

If you are trying to compile a C++ program with a non-primary libc,

you will need to include the g++ include dir, which in the examples

above would be /usr/i486-linuxglibc2/include/g++ for a test glibc

install or /usr/i486-linuxlibc5/include/g++ for a primary glibc

install. This can usually be done by appending the $CXXFLAGS

variable:

 

CXXFLAGS = -nostdinc -I/usr/i486-linuxglibc2/include -I/usr/lib/gcc-lib/i486-linuxglibc2/2.7.2.2/include -I/usr/i486-linuxlibc5/include/g++ -b i486-linuxglibc2

 

 

 

 

 

 

8. Reporting bugs.

 

If you think the lib is buggy, please read first the FAQ. It might be

that others had the same problem and there's an easy solution. You

should also check the section "Recommended Tools to Install the GNU C

Library" in the INSTALL file since some bugs are bugs of the tools and

not of glibc.

Once you've found a bug, make sure it's really a bug. A good way to do

this is to see if the GNU C library behaves the same way some other C

library does. If so, probably you are wrong and the libraries are

right (but not necessarily). If not, one of the libraries is probably

wrong.

Next, go to <http://www-gnats.gnu.org:8080/cgi-bin/wwwgnats.pl>, and

look through the bug database. Check here to verify the problem has

not already be reported. You should also look at the file BUGS

(distributed with libc) to check for known bugs.

Once you're sure you've found a new bug, try to narrow it down to the

smallest test case that reproduces the problem. In the case of a C

library, you really only need to narrow it down to one library

function call, if possible. This should not be too difficult.

The final step when you have a simple test case is to report the bug.

When reporting a bug, send your test case, the results you got, the

results you expected, what you think the problem might be (if you've

thought of anything), your system type, the versions of the GNU C

library, the GNU CC compiler, and the GNU Binutils which you are

using. Also include the files config.status and config.make which are

created by running configure; they will be in whatever directory was

current when you ran configure.

All bug reports for the GNU C library should be sent using the

glibcbug shell script which comes with the GNU libc to <bugs@gnu.org>

(the older address <bugs@gnu.ai.mit.edu> is still working), or

submitted through the GNATS web interface at <http://www-

gnats.gnu.org:8080/cgi-bin/wwwgnats.pl>.

Suggestions and questions should be sent to the mailing list at <bugs-

glibc@prep.ai.mit.edu>. If you don't read the gnewsgroup

gnu.bug.glibc, you can subscribe to the list by asking <bug-glibc-

request@prep.ai.mit.edu>.

Please DO NOT send bug report for the GNU C library to <bug-

gcc@prep.ai.mit.edu>. That list is for bug reports for GNU CC. GNU

CC and the GNU C library are separate entities maintained by separate

people.

 

 

9. Sample specs file.

 

Included here is a sample specs file for glibc 2 which is used by gcc

for compiling and linking. It should be found in the directory

/usr/lib/gcc-lib/<new system dir>/<gcc version>. If you are running

an x86 system, you probably can copy this section to the file exactly.

 

*asm:

%{V} %{v:%{!V:-V}} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*}

*asm_final:

%{pipe:-}

*cpp:

%{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} %{!m386:-D__i486__} %{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}

*cc1:

%{profile:-p}

*cc1plus:

 

*endfile:

%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s

*link:

-m elf_i386 %{shared:-shared} %{!shared: %{!ibcs: %{!static: %{rdynamic:-export-dynamic} %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} %{static:-static}}}

*lib:

%{!shared: %{pthread:-lpthread} %{profile:-lc_p} %{!profile: -lc}}

*libgcc:

-lgcc

*startfile:

%{!shared: %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} %{!p:%{profile:gcrt1.o%s} %{!profile:crt1.o%s}}}} crti.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}

*switches_need_spaces:

 

*signed_char:

%{funsigned-char:-D__CHAR_UNSIGNED__}

*predefines:

-D__ELF__ -Dunix -Di386 -Dlinux -Asystem(unix) -Asystem(posix) -Acpu(i386) -Amachine(i386)

*cross_compile:

0

*multilib:

. ;

 

 

 

 

 

10. Miscellanea.

 

 

10.1. Further information.

 

 

10.1.1. Web pages.

 

 

o FSF's GNU C Library Home Page

<http://www.gnu.org/software/libc/libc.html>

o Using GNU Libc 2 with Linux <http://www.imaxx.net/~thrytis/glibc/>

o Installing glibc-2 on Linux <http://huizen.dds.nl/~frodol/glibc/>.

o Debian libc5 to libc6 Mini-HOWTO

<http://www.gate.net/~storm/FAQ/libc5-libc6-Mini-HOWTO.html>.

 

10.1.2. Newgroups.

 

 

o comp.os.linux.development.system

o comp.os.linux.development.apps

o linux.dev.kernel

o gnu.bugs.glibc

 

10.1.3. Mailing lists.

 

 

Glibc 2 Linux discussion list.

This list is intended for discussion among Linux users who have

installed glibc2, the new GNU C libraries. Topics might include

compatibility issues and questions about the compilation of code

in a Linux/glibc setting. To subscribe, send mail to

Majordomo@ricardo.ecn.wfu.edu

<mailto:Majordomo@ricardo.ecn.wfu.edu> with a body of "subscribe

glibc-linux <your email address>.

 

10.2. Credits.

 

Most of this information was stolen from the GNU Libc web page

<http://www.gnu.org/software/libc/libc.html> and from Ulrich Drepper's

<drepper@gnu.ai.mit.edu> glibc 2 announcement and his comments.

Andreas Jaeger <aj@arthur.rhein-neckar.de> provided some of the

Reporting bugs section.

The following people have provided information and feedback for this

document:

o Allex <allex@ms2.accmail.com.tw>

o Mark Brown <M.A.Brown-4@sms.ed.ac.uk>

o Ulrich Drepper <drepper@gnu.ai.mit.edu>

o Scott K. Ellis <ellis@valueweb.net>

o Aron Griffis <agriffis@coat.com>

o Andreas Jaeger <aj@arthur.rhein-neckar.de>

o Frodo Looijaard <frodol@dds.nl>

o Ryan McGuire <rmcguire@freenet.columbus.oh.us>

o Shaya Potter <spotter@capaccess.org>

o Les Schaffer <godzilla@futuris.net>

o Andy Sewell <puck@pookhill.demon.co.uk>

o Gary Shea <shea@gtsdesign.com>

o Stephane <sr@adb.fr>

o Jan Vandenbos <jan@imaxx.net>

Translations of this document are being done by:

o Chinese: Allex <allex@ms2.accmail.com.tw>

o French: Olivier Tharan <tharan@int-evry.fr>

o Japanese: Kazuyuki Okamoto <ikko-@pacific.rim.or.jp>

 

 

10.3. Feedback.

 

Besides writing this HOWTO, maintaining the glibc 2 for Linux

<http://www.imaxx.net/~thrytis/glibc> page, and using it on my

machine, I have nothing to do with the glibc project. I am far from

knowledgeable on this topic, though I try to help with problems mailed

to me. I welcome any feedback, corrections, or suggestions you have

to offer. Please send them to ejg3@cornell.edu

<mailto:ejg3@cornell.edu>.

 

10.4. Copyright.

Copyright (c) 1997 by Eric Green. This document may be distributed

under the terms set forth in the LDP license.


| HowTo Linux Zone | Linux Zone Home | E-Mail Me |

Copyright 1999

Linux Zone