13
13
Installing the GNU C Library
14
14
****************************
16
Before you do anything else, you should read the file `FAQ' located at
17
the top level of the source tree. This file answers common questions
16
Before you do anything else, you should read the FAQ at
17
`http://sourceware.org/glibc/wiki/FAQ'. It answers common questions
18
18
and describes problems you may experience with compilation and
19
installation. It is updated more frequently than this manual.
21
Features can be added to GNU Libc via "add-on" bundles. These are
22
separate tar files, which you unpack into the top level of the source
23
tree. Then you give `configure' the `--enable-add-ons' option to
24
activate them, and they will be compiled into the library.
21
Features can be added to the GNU C Library via "add-on" bundles.
22
These are separate tar files, which you unpack into the top level of
23
the source tree. Then you give `configure' the `--enable-add-ons'
24
option to activate them, and they will be compiled into the library.
26
26
You will need recent versions of several GNU tools: definitely GCC
27
27
and GNU Make, and possibly others. *Note Tools for Compilation::,
30
Configuring and compiling GNU Libc
31
==================================
30
Configuring and compiling the GNU C Library
31
===========================================
33
GNU libc cannot be compiled in the source directory. You must build it
34
in a separate build directory. For example, if you have unpacked the
35
glibc sources in `/src/gnu/glibc-2.4', create a directory
36
`/src/gnu/glibc-build' to put the object files in. This allows
37
removing the whole build directory in case an error occurs, which is
38
the safest way to get a fresh start and should always be done.
33
The GNU C Library cannot be compiled in the source directory. You must
34
build it in a separate build directory. For example, if you have
35
unpacked the GNU C Library sources in `/src/gnu/glibc-VERSION', create
36
a directory `/src/gnu/glibc-build' to put the object files in. This
37
allows removing the whole build directory in case an error occurs,
38
which is the safest way to get a fresh start and should always be done.
40
40
From your object directory, run the shell script `configure' located
41
41
at the top level of the source tree. In the scenario above, you'd type
43
$ ../glibc-2.4/configure ARGS...
43
$ ../glibc-VERSION/configure ARGS...
45
45
Please note that even though you're building in a separate build
46
directory, the compilation needs to modify a few files in the source
47
directory, especially some files in the manual subdirectory.
46
directory, the compilation may need to create or modify files and
47
directories in the source directory.
49
49
`configure' takes many options, but the only one that is usually
50
50
mandatory is `--prefix'. This option tells `configure' where you want
51
glibc installed. This defaults to `/usr/local', but the normal setting
52
to install as the standard system library is `--prefix=/usr' for
53
GNU/Linux systems and `--prefix=' (an empty prefix) for GNU/Hurd
51
the GNU C Library installed. This defaults to `/usr/local', but the
52
normal setting to install as the standard system library is
53
`--prefix=/usr' for GNU/Linux systems and `--prefix=' (an empty prefix)
56
56
It may also be useful to set the CC and CFLAGS variables in the
57
57
environment when running `configure'. CC selects the C compiler that
72
72
`--with-headers=DIRECTORY'
73
73
Look for kernel header files in DIRECTORY, not `/usr/include'.
74
Glibc needs information from the kernel's private header files.
75
Glibc will normally look in `/usr/include' for them, but if you
76
specify this option, it will look in DIRECTORY instead.
74
The GNU C Library needs information from the kernel's header files
75
describing the interface to the kernel. The GNU C Library will
76
normally look in `/usr/include' for them, but if you specify this
77
option, it will look in DIRECTORY instead.
78
79
This option is primarily of use on a system where the headers in
79
`/usr/include' come from an older version of glibc. Conflicts can
80
occasionally happen in this case. Note that Linux libc5 qualifies
81
as an older version of glibc. You can also use this option if you
82
want to compile glibc with a newer set of kernel headers than the
83
ones found in `/usr/include'.
80
`/usr/include' come from an older version of the GNU C Library.
81
Conflicts can occasionally happen in this case. You can also use
82
this option if you want to compile the GNU C Library with a newer
83
set of kernel headers than the ones found in `/usr/include'.
85
85
`--enable-add-ons[=LIST]'
86
86
Specify add-on packages to include in the build. If this option is
226
216
To install the library and its header files, and the Info files of the
227
217
manual, type `env LANGUAGE=C LC_ALL=C make install'. This will build
228
218
things, if necessary, before installing them; however, you should still
229
compile everything first. If you are installing glibc as your primary
230
C library, we recommend that you shut the system down to single-user
231
mode first, and reboot afterward. This minimizes the risk of breaking
232
things when the library changes out from underneath.
219
compile everything first. If you are installing the GNU C Library as
220
your primary C library, we recommend that you shut the system down to
221
single-user mode first, and reboot afterward. This minimizes the risk
222
of breaking things when the library changes out from underneath.
234
If you're upgrading from Linux libc5 or some other C library, you
235
need to replace the `/usr/include' with a fresh directory before
236
installing it. The new `/usr/include' should contain the Linux
237
headers, but nothing else.
224
`make install' will do the entire job of upgrading from a previous
225
installation of the GNU C Library version 2.x. There may sometimes be
226
headers left behind from the previous installation, but those are
227
generally harmless. If you want to avoid leaving headers behind you
228
can do things in the following order.
239
230
You must first build the library (`make'), optionally check it
240
231
(`make check'), switch the include directories and then install (`make
242
233
directory before install will result in an unusable mixture of header
243
234
files from both libraries, but configuring, building, and checking the
244
235
library requires the ability to compile and run programs against the old
247
If you are upgrading from a previous installation of glibc 2.0 or
248
2.1, `make install' will do the entire job. You do not need to remove
249
the old includes - if you want to do so anyway you must then follow the
252
You may also need to reconfigure GCC to work with the new library.
253
The easiest way to do that is to figure out the compiler switches to
254
make it work again (`-Wl,--dynamic-linker=/lib/ld-linux.so.2' should
255
work on GNU/Linux systems) and use them to recompile gcc. You can also
256
edit the specs file (`/usr/lib/gcc-lib/TARGET/VERSION/specs'), but that
257
is a bit of a black art.
259
You can install glibc somewhere other than where you configured it
260
to go by setting the `install_root' variable on the command line for
261
`make install'. The value of this variable is prepended to all the
262
paths for installation. This is useful when setting up a chroot
263
environment or preparing a binary distribution. The directory should be
264
specified with an absolute file name.
266
Glibc 2.2 includes a daemon called `nscd', which you may or may not
267
want to run. `nscd' caches name service lookups; it can dramatically
268
improve performance with NIS+, and may help with DNS as well.
236
library. The new `/usr/include', after switching the include
237
directories and before installing the library should contain the Linux
238
headers, but nothing else. If you do this, you will need to restore
239
any headers from libraries other than the GNU C Library yourself after
240
installing the library.
242
You can install the GNU C Library somewhere other than where you
243
configured it to go by setting the `install_root' variable on the
244
command line for `make install'. The value of this variable is
245
prepended to all the paths for installation. This is useful when
246
setting up a chroot environment or preparing a binary distribution.
247
The directory should be specified with an absolute file name.
249
The GNU C Library includes a daemon called `nscd', which you may or
250
may not want to run. `nscd' caches name service lookups; it can
251
dramatically improve performance with NIS+, and may help with DNS as
270
254
One auxiliary program, `/usr/libexec/pt_chown', is installed setuid
271
255
`root'. This program is invoked by the `grantpt' function; it sets the
272
256
permissions on a pseudoterminal so it can be used by the calling
273
257
process. This means programs like `xterm' and `screen' do not have to
274
258
be setuid to get a pty. (There may be other reasons why they need
275
privileges.) If you are using a 2.1 or newer Linux kernel with the
276
`devptsfs' or `devfs' filesystems providing pty slaves, you don't need
277
this program; otherwise you do. The source for `pt_chown' is in
259
privileges.) If you are using a Linux kernel with the `devptsfs' or
260
`devfs' filesystems providing pty slaves, you don't need this program;
261
otherwise you do. The source for `pt_chown' is in
278
262
`login/programs/pt_chown.c'.
280
264
After installation you might want to configure the timezone and
281
locale installation of your system. The GNU C library comes with a
265
locale installation of your system. The GNU C Library comes with a
282
266
locale database which gets configured with `localedef'. For example, to
283
267
set up a German locale with name `de_DE', simply issue the command
284
268
`localedef -i de_DE -f ISO-8859-1 de_DE'. To configure all locales
285
that are supported by glibc, you can issue from your build directory the
286
command `make localedata/install-locales'.
269
that are supported by the GNU C Library, you can issue from your build
270
directory the command `make localedata/install-locales'.
288
272
To configure the locally used timezone, set the `TZ' environment
289
273
variable. The script `tzselect' helps you to select the right value.
308
292
recommend GNU `make' version 3.79. All earlier versions have
309
293
severe bugs or lack features.
311
* GCC 3.4 or newer, GCC 4.1 recommended
313
For the 2.4 release or later, GCC 3.4 or higher is required; as of
314
this writing, GCC 4.4 is the compiler we advise to use for current
315
versions. On certain machines including `powerpc64', compilers
316
prior to GCC 4.0 have bugs that prevent them compiling the C
317
library code in the 2.4 release. On other machines, GCC 4.1 is
318
required to build the C library with support for the correct `long
319
double' type format; these include `powerpc' (32 bit), `s390' and
320
`s390x'. For other architectures special compiler-provided
321
headers are needed (like `cpuid.h' on x86) which only come with
322
later compiler versions.
324
You can use whatever compiler you like to compile programs that
325
use GNU libc, but be aware that both GCC 2.7 and 2.8 have bugs in
326
their floating-point support that may be triggered by the math
295
* GCC 4.3 or newer, GCC 4.6 recommended
297
GCC 4.3 or higher is required; as of this writing, GCC 4.6 is the
298
compiler we advise to use to build the GNU C Library.
300
You can use whatever compiler you like to compile programs that use
329
303
Check the FAQ for any special compiler issues on particular
306
* GNU `binutils' 2.20 or later
334
You must use GNU `binutils' (as and ld) to build the GNU C library.
308
You must use GNU `binutils' (as and ld) to build the GNU C Library.
335
309
No other assembler or linker has the necessary functionality at the
336
moment. The configure scripts checks for the appropriate version
337
for the platform. Too-old versions will prevent building glibc.
339
* GNU `texinfo' 3.12f
312
* GNU `texinfo' 4.5 or later
341
314
To correctly translate and install the Texinfo documentation you
342
315
need this version of the `texinfo' package. Earlier versions do
378
351
Specific advice for GNU/Linux systems
379
352
=====================================
381
If you are installing GNU libc on a GNU/Linux system, you need to have
382
the header files from a 2.2 or newer kernel around for reference. For
383
some architectures, like ia64, sh and hppa, you need at least headers
384
from kernel 2.3.99 (sh and hppa) or 2.4.0 (ia64). You do not need to
385
use that kernel, just have its headers where glibc can access at them.
386
The easiest way to do this is to unpack it in a directory such as
387
`/usr/src/linux-2.2.1'. In that directory, run `make config' and
388
accept all the defaults. Then run `make include/linux/version.h'.
389
Finally, configure glibc with the option
390
`--with-headers=/usr/src/linux-2.2.1/include'. Use the most recent
391
kernel you can get your hands on.
393
An alternate tactic is to unpack the 2.2 kernel and run `make
394
config' as above; then, rename or delete `/usr/include', create a new
395
`/usr/include', and make symbolic links of `/usr/include/linux' and
396
`/usr/include/asm' into the kernel sources. You can then configure
397
glibc with no special options. This tactic is recommended if you are
398
upgrading from libc5, since you need to get rid of the old header files
401
After installing GNU libc, you may need to remove or rename
402
`/usr/include/linux' and `/usr/include/asm', and replace them with
403
copies of `include/linux' and `include/asm-$ARCHITECTURE' taken from
404
the Linux source package which supplied kernel headers for building the
405
library. ARCHITECTURE will be the machine architecture for which the
406
library was built, such as `i386' or `alpha'. You do not need to do
407
this if you did not specify an alternate kernel header source using
408
`--with-headers'. The intent here is that these directories should be
409
copies of, *not* symlinks to, the kernel headers used to build the
412
Note that `/usr/include/net' and `/usr/include/scsi' should *not* be
413
symlinks into the kernel sources. GNU libc provides its own versions
416
GNU/Linux expects some components of the libc installation to be in
417
`/lib' and some in `/usr/lib'. This is handled automatically if you
418
configure glibc with `--prefix=/usr'. If you set some other prefix or
419
allow it to default to `/usr/local', then all the components are
422
If you are upgrading from libc5, you need to recompile every shared
423
library on your system against the new library for the sake of new code,
424
but keep the old libraries around for old binaries to use. This is
425
complicated and difficult. Consult the Glibc2 HOWTO at
426
`http://www.imaxx.net/~thrytis/glibc' for details.
428
You cannot use `nscd' with 2.0 kernels, due to bugs in the
429
kernel-side thread support. `nscd' happens to hit these bugs
430
particularly hard, but you might have problems with any threaded
354
If you are installing the GNU C Library on GNU/Linux systems, you need
355
to have the header files from a 2.6.19.1 or newer kernel around for
356
reference. These headers must be installed using `make
357
headers_install'; the headers present in the kernel source directory
358
are not suitable for direct use by the GNU C Library. You do not need
359
to use that kernel, just have its headers installed where the GNU C
360
Library can access them, referred to here as INSTALL-DIRECTORY. The
361
easiest way to do this is to unpack it in a directory such as
362
`/usr/src/linux-VERSION'. In that directory, run `make headers_install
363
INSTALL_HDR_PATH=INSTALL-DIRECTORY'. Finally, configure the GNU C
364
Library with the option `--with-headers=INSTALL-DIRECTORY/include'.
365
Use the most recent kernel you can get your hands on. (If you are
366
cross-compiling the GNU C Library, you need to specify
367
`ARCH=ARCHITECTURE' in the `make headers_install' command, where
368
ARCHITECTURE is the architecture name used by the Linux kernel, such as
371
After installing the GNU C Library, you may need to remove or rename
372
directories such as `/usr/include/linux' and `/usr/include/asm', and
373
replace them with copies of directories such as `linux' and `asm' from
374
`INSTALL-DIRECTORY/include'. All directories present in
375
`INSTALL-DIRECTORY/include' should be copied, except that the GNU C
376
Library provides its own version of `/usr/include/scsi'; the files
377
provided by the kernel should be copied without replacing those
378
provided by the GNU C Library. The `linux', `asm' and `asm-generic'
379
directories are required to compile programs using the GNU C Library;
380
the other directories describe interfaces to the kernel but are not
381
required if not compiling programs using those interfaces. You do not
382
need to copy kernel headers if you did not specify an alternate kernel
383
header source using `--with-headers'.
385
The Filesystem Hierarchy Standard for GNU/Linux systems expects some
386
components of the GNU C Library installation to be in `/lib' and some
387
in `/usr/lib'. This is handled automatically if you configure the GNU
388
C Library with `--prefix=/usr'. If you set some other prefix or allow
389
it to default to `/usr/local', then all the components are installed
436
There are probably bugs in the GNU C library. There are certainly
395
There are probably bugs in the GNU C Library. There are certainly
437
396
errors and omissions in this manual. If you report them, they will get
438
397
fixed. If you don't, no one will ever know about them and they will
439
398
remain unfixed for all eternity, if not longer.
441
400
It is a good idea to verify that the problem has not already been
442
401
reported. Bugs are documented in two places: The file `BUGS' describes
443
402
a number of well known bugs and the bug tracking system has a WWW
444
interface at `http://sources.redhat.com/bugzilla/'. The WWW interface
403
interface at `http://sourceware.org/bugzilla/'. The WWW interface
445
404
gives you access to open and closed reports. A closed report normally
446
405
includes a patch or a hint on solving the problem.
448
407
To report a bug, first you must find it. With any luck, this will
449
408
be the hard part. Once you've found a bug, make sure it's really a
450
bug. A good way to do this is to see if the GNU C library behaves the
409
bug. A good way to do this is to see if the GNU C Library behaves the
451
410
same way some other C library does. If so, probably you are wrong and
452
411
the libraries are right (but not necessarily). If not, one of the
453
libraries is probably wrong. It might not be the GNU library. Many
412
libraries is probably wrong. It might not be the GNU C Library. Many
454
413
historical Unix C libraries permit things that we don't, such as
455
414
closing a file twice.
457
If you think you have found some way in which the GNU C library does
416
If you think you have found some way in which the GNU C Library does
458
417
not conform to the ISO and POSIX standards (*note Standards and
459
418
Portability::), that is definitely a bug. Report it!