The GNU C Library cannot be compiled in the source directory. You must build it in a separate build directory. For example, if you have unpacked the GNU C Library sources in /src/gnu/glibc-version, create a directory /src/gnu/glibc-build to put the object files in. This allows removing the whole build directory in case an error occurs, which is the safest way to get a fresh start and should always be done.
From your object directory, run the shell script configure located at the top level of the source tree. In the scenario above, you'd type
$ ../glibc-version/configure args...
Please note that even though you're building in a separate build directory, the compilation may need to create or modify files and directories in the source directory.
configure takes many options, but the only one that is usually
mandatory is ‘--prefix’. This option tells
where you want the GNU C Library installed. This defaults to /usr/local,
but the normal setting to install as the standard system library is
‘--prefix=/usr’ for GNU/Linux systems and ‘--prefix=’ (an
empty prefix) for GNU/Hurd systems.
It may also be useful to set the CC and CFLAGS variables in
the environment when running
configure. CC selects the C
compiler that will be used, and CFLAGS sets optimization options
for the compiler.
The following list describes all of the available options for
This option is primarily of use on a system where the headers in
/usr/include come from an older version of the GNU C Library. Conflicts can
occasionally happen in this case. You can also use this option if you want to
compile the GNU C Library with a newer set of kernel headers than the ones found in
configurewill detect the problem and suppress these constructs, so that the library will still be usable, but functionality may be lost—for example, you can't build a shared libc with old binutils.
grantpt(see Pseudo-Terminals) that is installed setuid root to fix up pseudo-terminal ownership. It is not built by default because systems using the Linux kernel are commonly built with the
devptsfilesystem enabled and mounted at /dev/pts, which manages pseudo-terminal ownership automatically. By using ‘--enable-pt_chown’, you may build pt_chown and install it setuid and owned by
root. The use of pt_chown introduces additional security risks to the system and you should enable it only if you understand and accept those risks.
configurewill prepare to cross-compile the GNU C Library from build-system to be used on host-system. You'll probably need the ‘--with-headers’ option too, and you may have to override configure's selection of the compiler and/or binutils.
If you only specify ‘--host’,
configure will prepare for a
native compile but use what you specify instead of guessing what your
system is. This is most useful to change the CPU submodel. For example,
configure guesses your machine as
you want to compile a library for 586es, give
‘--host=i586-pc-linux-gnu’ or just ‘--host=i586-linux’ and add
the appropriate compiler flags (‘-mcpu=i586’ will do the trick) to
If you specify just ‘--build’,
configure will get confused.
To build the library and related programs, type
make. This will
produce a lot of output, some of which may look like errors from
make but isn't. Look for error messages from
containing ‘***’. Those indicate that something is seriously wrong.
The compilation process can take a long time, depending on the configuration and the speed of your machine. Some complex modules may take a very long time to compile, as much as several minutes on slower machines. Do not panic if the compiler appears to hang.
If you want to run a parallel make, simply pass the ‘-j’ option
with an appropriate numeric parameter to
make. You need a recent
make version, though.
To build and run test programs which exercise some of the library
make check. If it does not complete
successfully, do not use the built library, and report a bug after
verifying that the problem is not already known. See Reporting Bugs,
for instructions on reporting bugs. Note that some of the tests assume
they are not being run by
root. We recommend you compile and
test the GNU C Library as an unprivileged user.
Before reporting bugs make sure there is no problem with your system. The tests (and later installation) use some pre-existing files of the system such as /etc/passwd, /etc/nsswitch.conf and others. These files must all contain correct and sensible content.
To format the GNU C Library Reference Manual for printing, type
make dvi. You need a working TeX installation to do
this. The distribution builds the on-line formatted version of the
manual, as Info files, as part of the build process. You can build
them manually with
The library has a number of special-purpose configuration parameters
which you can find in Makeconfig. These can be overwritten with
the file configparms. To change them, create a
configparms in your build directory and add values as appropriate
for your system. The file is included and parsed by
make and has
to follow the conventions for makefiles.
It is easy to configure the GNU C Library for cross-compilation by
setting a few variables in configparms. Set
CC to the
cross-compiler for the target you configured the library for; it is
important to use this same
CC value when running
configure, like this: ‘CC=target-gcc configure
BUILD_CC to the compiler to use for programs
run on the build system as part of compiling the library. You may need to
AR to cross-compiling versions of
if the native tools are not configured to work with
object files for the target you configured for. When cross-compiling
the GNU C Library, it may be tested using ‘make check
where srcdir is the absolute directory name for the main source
directory and hostname is the host name of a system that can run
the newly built binaries of the GNU C Library. The source and build
directories must be visible at the same locations on both the build
system and hostname.
In general, when testing the GNU C Library, ‘test-wrapper’ may be set to the name and arguments of any program to run newly built binaries. This program must preserve the arguments to the binary being run, its working directory, all environment variables set as part of testing and the standard input, output and error file descriptors. If ‘test-wrapper env’ will not work to run a program with environment variables set, then ‘test-wrapper-env’ must be set to a program that runs a newly built program with environment variable assignments in effect, those assignments being specified as ‘var=value’ before the name of the program to be run.