GNU libc cannot be compiled in the source directory. You must build it in a separate build directory. For example, if you have unpacked the glibc sources in /src/gnu/glibc-2.4, 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-2.4/configure args...
Please note that even though you're building in a separate build directory, the compilation needs to modify a few files in the source directory, especially some files in the manual subdirectory.
configure
takes many options, but the only one that is usually
mandatory is ‘--prefix’. This option tells configure
where you want glibc 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
configure
:
This option is primarily of use on a system where the headers in
/usr/include come from an older version of glibc. Conflicts can
occasionally happen in this case. Note that Linux libc5 qualifies as an
older version of glibc. You can also use this option if you want to
compile glibc with a newer set of kernel headers than the ones found in
/usr/include.
configure
will 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.
these
configure
will prepare to cross-compile glibc 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,
if configure
guesses your machine as i586-pc-linux-gnu
but
you want to compile a library for 386es, give
‘--host=i386-pc-linux-gnu’ or just ‘--host=i386-linux’ and add
the appropriate compiler flags (‘-mcpu=i386’ will do the trick) to
CFLAGS.
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 make
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
GNU make
version, though.
To build and run test programs which exercise some of the library
facilities, type 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 glibc 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 already includes the on-line formatted version of the
manual, as Info files. You can regenerate those with make info
, but it shouldn't be necessary.
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
target’. Set BUILD_CC
to the compiler to use for programs
run on the build system as part of compiling the library. You may need to
set AR
and RANLIB
to cross-compiling versions of ar
and ranlib
if the native tools are not configured to work with
object files for the target you configured for.