]> sourceware.org Git - glibc.git/blame - FAQ.in
Update.
[glibc.git] / FAQ.in
CommitLineData
61952351
UD
1 Frequently Asked Questions about the GNU C Library
2
f12944ec
UD
3This document tries to answer questions a user might have when installing
4and using glibc. Please make sure you read this before sending questions or
5bug reports to the maintainers.
61952351 6
f12944ec 7The GNU C library is very complex. The installation process has not been
fdacb17d 8completely automated; there are too many variables. You can do substantial
f12944ec
UD
9damage to your system by installing the library incorrectly. Make sure you
10understand what you are undertaking before you begin.
61952351
UD
11
12If you have any questions you think should be answered in this document,
13please let me know.
14
15 --drepper@cygnus.com
16\f
17? Compiling glibc
18
19?? What systems does the GNU C Library run on?
20
f12944ec
UD
21{UD} This is difficult to answer. The file `README' lists the architectures
22GNU libc was known to run on *at some time*. This does not mean that it
23still can be compiled and run on them now.
61952351 24
f12944ec
UD
25The systems glibc is known to work on as of this release, and most probably
26in the future, are:
61952351
UD
27
28 *-*-gnu GNU Hurd
bd355af0
UD
29 i[3456]86-*-linux-gnu Linux-2.x on Intel
30 m68k-*-linux-gnu Linux-2.x on Motorola 680x0
31 alpha-*-linux-gnu Linux-2.x on DEC Alpha
61952351 32 powerpc-*-linux-gnu Linux and MkLinux on PowerPC systems
bd355af0
UD
33 sparc-*-linux-gnu Linux-2.x on SPARC
34 sparc64-*-linux-gnu Linux-2.x on UltraSPARC
a35cb74d 35 arm-*-none ARM standalone systems
cb0509a8 36 arm-*-linux Linux-2.x on ARM
a35cb74d 37 arm-*-linuxaout Linux-2.x on ARM using a.out binaries
61952351 38
f12944ec
UD
39Ports to other Linux platforms are in development, and may in fact work
40already, but no one has sent us success reports for them. Currently no
41ports to other operating systems are underway, although a few people have
42expressed interest.
61952351 43
f12944ec
UD
44If you have a system not listed above (or in the `README' file) and you are
45really interested in porting it, contact
61952351 46
b9b49b44 47 <bug-glibc@gnu.org>
61952351 48
57b4b78a 49??binsize What compiler do I need to build GNU libc?
61952351 50
f12944ec
UD
51{UD} You must use GNU CC to compile GNU libc. A lot of extensions of GNU CC
52are used to increase portability and speed.
61952351
UD
53
54GNU CC is found, like all other GNU packages, on
f12944ec 55
2eb45444 56 ftp://ftp.gnu.org/pub/gnu
f12944ec 57
2eb45444 58and the many mirror sites. ftp.gnu.org is always overloaded, so try to find
61952351
UD
59a local mirror first.
60
ceb27555 61You should always try to use the latest official release. Older versions
f12944ec 62may not have all the features GNU libc requires. The current releases of
b8f558b7
UD
63egcs (1.0.3 and 1.1.1) should work with the GNU C library (for powerpc see
64?powerpc; for ARM see ?arm).
61952351 65
57b4b78a
UD
66While the GNU CC should be able to compile glibc it is nevertheless adviced
67to use EGCS. Comparing the sizes of glibc on Intel compiled with a recent
68EGCS and gcc 2.8.1 shows this:
69
70 text data bss dec hex filename
66f6a52b
UD
71 egcs-2.93.10 862897 15944 12824 891665 d9b11 libc.so
72 gcc-2.8.1 959965 16468 12152 988585 f15a9 libc.so
57b4b78a
UD
73
74Make up your own decision.
d89e7a96 75
83f6a990
UD
76GNU CC versions 2.95 and above are derived from egcs, and they may do even
77better.
78
a125d9b4
UD
79Please note that gcc 2.95 and 2.95.1 cannot compile glibc on Alpha due to
80problems in the complex float support.
81
61952351
UD
82?? When I try to compile glibc I get only error messages.
83 What's wrong?
84
b1418d8f 85{UD} You definitely need GNU make to build GNU libc. No other make
f12944ec 86program has the needed functionality.
61952351 87
d89e7a96
UD
88We recommend version GNU make version 3.75 or 3.77. Versions before 3.75
89have bugs and/or are missing features. Version 3.76 has bugs which
90appear when building big projects like GNU libc. 3.76.1 appears to work but
d8a167a5 91some people have reported problems. If you build GNU make 3.77 from source,
c882585f 92please read ?make first.
61952351 93
d89e7a96 94?? Do I need a special linker or assembler?
61952351 95
d89e7a96
UD
96{ZW} If you want a shared library, you need a linker and assembler that
97understand all the features of ELF, including weak and versioned symbols.
98The static library can be compiled with less featureful tools, but lacks key
99features such as NSS.
61952351 100
d89e7a96
UD
101For Linux or Hurd, you want binutils 2.8.1.0.23, 2.9.1, or 2.9.1.0.15 or
102higher. These are the only versions we've tested and found reliable. Other
103versions after 2.8.1.0.23 may work but we don't recommend them, especially
104not when C++ is involved. Earlier versions do not work at all.
7fd18ea2 105
d89e7a96
UD
106Other operating systems may come with system tools that have all the
107necessary features, but this is moot because glibc hasn't been ported to
108them.
61952351 109
8619129f 110??powerpc Which compiler should I use for powerpc?
4775243a 111
83f6a990
UD
112{GK} You want to use at least gcc 2.95 (together with the right versions
113of all the other tools, of course). See also question ?excpt.
4775243a 114
cb0509a8
UD
115??arm Which tools should I use for ARM?
116
117{PB} You should use egcs 1.1 or a later version. For ELF systems some
118changes are needed to the compiler; a patch against egcs-1.1.x can be found
119at:
120
121<ftp://ftp.netwinder.org/users/p/philb/egcs-1.1.1pre2-diff-981126>
122
123Binutils 2.9.1.0.16 or later is also required.
124
d89e7a96 125?? Do I need some more things to compile the GNU C Library?
61952351
UD
126
127{UD} Yes, there are some more :-).
128
129* GNU gettext. This package contains the tools needed to construct
130 `message catalog' files containing translated versions of system
2eb45444 131 messages. See ftp://ftp.gnu.org/pub/gnu or better any mirror
61952351 132 site. (We distribute compiled message catalogs, but they may not be
2f2f52f7
UD
133 updated in patches.) Please note that the required minimal version
134 (0.10.35) of gettext is alpha software and available from
135 ftp://alpha.gnu.org/gnu .
61952351 136
d89e7a96
UD
137* Some files are built with special tools. E.g., files ending in .gperf
138 need a `gperf' program. The GNU version (now available in a separate
139 package, formerly only as part of libg++) is known to work while some
140 vendor versions do not.
61952351
UD
141
142 You should not need these tools unless you change the source files.
143
d89e7a96
UD
144* Perl 5 is needed if you wish to test an installation of GNU libc
145 as the primary C library.
bd355af0 146
61952351
UD
147* When compiling for Linux, the header files of the Linux kernel must
148 be available to the compiler as <linux/*.h> and <asm/*.h>.
149
02228370 150* lots of disk space (~400MB for i?86-linux; more for RISC platforms).
61952351
UD
151
152* plenty of time. Compiling just the shared and static libraries for
16b0f634
UD
153 i?86-linux takes approximately 1h on an AMD-K6@225MHz w/ 96MB of RAM,
154 45mins on a Celeron@400MHz w/ 128MB, and 55mins on a Alpha@533MHz w/ 256MB.
7c2b945e
UD
155 Multiply this by 1.5 or 2.0 if you build profiling and/or the highly
156 optimized version as well. For Hurd systems times are much higher.
61952351
UD
157
158 You should avoid compiling in a NFS mounted filesystem. This is
159 very slow.
160
161 James Troup <J.J.Troup@comp.brad.ac.uk> reports a compile time of
bd355af0
UD
162 45h34m for a full build (shared, static, and profiled) on Atari
163 Falcon (Motorola 68030 @ 16 Mhz, 14 Mb memory) and Jan Barte
164 <yann@plato.uni-paderborn.de> reports 22h48m on Atari TT030
165 (Motorola 68030 @ 32 Mhz, 34 Mb memory)
61952351 166
83f6a990
UD
167 A full build of the PowerPC library took 1h on a PowerPC 750@400Mhz w/
168 64MB of RAM, and about 9h on a 601@60Mhz w/ 72Mb.
169
61952351
UD
170 If you have some more measurements let me know.
171
d111572f
UD
172?? What version of the Linux kernel headers should be used?
173
f12944ec
UD
174{AJ,UD} The headers from the most recent Linux kernel should be used. The
175headers used while compiling the GNU C library and the kernel binary used
176when using the library do not need to match. The GNU C library runs without
177problems on kernels that are older than the kernel headers used. The other
178way round (compiling the GNU C library with old kernel headers and running
179on a recent kernel) does not necessarily work. For example you can't use
b1418d8f 180new kernel features if you used old kernel headers to compile the GNU C
f12944ec
UD
181library.
182
ceb27555 183{ZW} Even if you are using a 2.0 kernel on your machine, we recommend you
440d13e2
UD
184compile GNU libc with 2.2 kernel headers. That way you won't have to
185recompile libc if you ever upgrade to kernel 2.2. To tell libc which
ceb27555 186headers to use, give configure the --with-headers switch
440d13e2 187(e.g. --with-headers=/usr/src/linux-2.2.0/include).
ceb27555 188
440d13e2 189Note that you must configure the 2.2 kernel if you do this, otherwise libc
62595351 190will be unable to find <linux/version.h>. Just change the current directory
440d13e2 191to the root of the 2.2 tree and do `make include/linux/version.h'.
ceb27555 192
f12944ec
UD
193?? The compiler hangs while building iconvdata modules. What's
194 wrong?
195
d89e7a96
UD
196{ZW} This is a problem with old versions of GCC. Initialization of large
197static arrays is very slow. The compiler will eventually finish; give it
198time.
f12944ec 199
b8f558b7 200The problem is fixed in egcs 1.1.
d111572f 201
61952351
UD
202?? When I run `nm -u libc.so' on the produced library I still
203 find unresolved symbols. Can this be ok?
204
f12944ec 205{UD} Yes, this is ok. There can be several kinds of unresolved symbols:
61952351
UD
206
207* magic symbols automatically generated by the linker. These have names
208 like __start_* and __stop_*
209
210* symbols starting with _dl_* come from the dynamic linker
211
61952351
UD
212* weak symbols, which need not be resolved at all (fabs for example)
213
214Generally, you should make sure you find a real program which produces
215errors while linking before deciding there is a problem.
216
217??addon What are these `add-ons'?
218
f12944ec
UD
219{UD} To avoid complications with export rules or external source code some
220optional parts of the libc are distributed as separate packages (e.g., the
221crypt package, see ?crypt).
61952351 222
f12944ec
UD
223To use these packages as part of GNU libc, just unpack the tarfiles in the
224libc source directory and tell the configuration script about them using the
225--enable-add-ons option. If you give just --enable-add-ons configure tries
226to find all the add-on packages in your source tree. This may not work. If
227it doesn't, or if you want to select only a subset of the add-ons, give a
228comma-separated list of the add-ons to enable:
61952351
UD
229
230 configure --enable-add-ons=crypt,linuxthreads
231
232for example.
233
f12944ec
UD
234Add-ons can add features (including entirely new shared libraries), override
235files, provide support for additional architectures, and just about anything
236else. The existing makefiles do most of the work; only some few stub rules
237must be written to get everything running.
61952351 238
5bb17dca
UD
239Most add-ons are tightly coupled to a specific GNU libc version. Please
240check that the add-ons work with the GNU libc. For example the crypt and
241linuxthreads add-ons have the same numbering scheme as the libc and will in
242general only work with the corresponding libc.
243
61952351
UD
244?? My XXX kernel emulates a floating-point coprocessor for me.
245 Should I enable --with-fp?
246
f12944ec
UD
247{ZW} An emulated FPU is just as good as a real one, as far as the C library
248is concerned. You only need to say --without-fp if your machine has no way
249to execute floating-point instructions.
61952351
UD
250
251People who are interested in squeezing the last drop of performance
252out of their machine may wish to avoid the trap overhead, but this is
253far more trouble than it's worth: you then have to compile
254*everything* this way, including the compiler's internal libraries
255(libgcc.a for GNU C), because the calling conventions change.
256
257?? When compiling GNU libc I get lots of errors saying functions
258 in glibc are duplicated in libgcc.
259
f12944ec
UD
260{EY} This is *exactly* the same problem that I was having. The problem was
261due to the fact that configure didn't correctly detect that the linker flag
262--no-whole-archive was supported in my linker. In my case it was because I
263had run ./configure with bogus CFLAGS, and the test failed.
61952351 264
f12944ec
UD
265One thing that is particularly annoying about this problem is that once this
266is misdetected, running configure again won't fix it unless you first delete
267config.cache.
61952351 268
f12944ec
UD
269{UD} Starting with glibc-2.0.3 there should be a better test to avoid some
270problems of this kind. The setting of CFLAGS is checked at the very
271beginning and if it is not usable `configure' will bark.
61952351 272
74015205 273?? Why do I get messages about missing thread functions when I use
da2d1bc5 274 librt? I don't even use threads.
74015205 275
da2d1bc5
UD
276{UD} In this case you probably mixed up your installation. librt uses
277threads internally and has implicit references to the thread library.
f12944ec
UD
278Normally these references are satisfied automatically but if the thread
279library is not in the expected place you must tell the linker where it is.
280When using GNU ld it works like this:
74015205
UD
281
282 gcc -o foo foo.c -Wl,-rpath-link=/some/other/dir -lrt
283
f12944ec
UD
284The `/some/other/dir' should contain the thread library. `ld' will use the
285given path to find the implicitly referenced library while not disturbing
286any other link path.
74015205 287
61952351
UD
288?? What's the problem with configure --enable-omitfp?
289
290{AJ} When --enable-omitfp is set the libraries are built without frame
fdacb17d 291pointers. Some compilers produce buggy code for this model and therefore we
f12944ec 292don't advise using it at the moment.
61952351 293
fdacb17d 294If you use --enable-omitfp, you're on your own. If you encounter problems
f12944ec
UD
295with a library that was build this way, we advise you to rebuild the library
296without --enable-omitfp. If the problem vanishes consider tracking the
297problem down and report it as compiler failure.
61952351 298
b1418d8f
UD
299Since a library built with --enable-omitfp is undebuggable on most systems,
300debuggable libraries are also built - you can use them by appending "_g" to
f12944ec 301the library names.
61952351 302
f12944ec
UD
303The compilation of these extra libraries and the compiler optimizations slow
304down the build process and need more disk space.
61952351 305
b1418d8f 306?? I get failures during `make check'. What should I do?
b0610668 307
b1418d8f
UD
308{AJ} The testsuite should compile and run cleanly on your system; every
309failure should be looked into. Depending on the failures, you probably
310should not install the library at all.
b0610668
UD
311
312You should consider using the `glibcbug' script to report the failure,
313providing as much detail as possible. If you run a test directly, please
314remember to set up the environment correctly. You want to test the compiled
315library - and not your installed one. The best way is to copy the exact
316command line which failed and run the test from the subdirectory for this
317test in the sources.
318
319There are some failures which are not directly related to the GNU libc:
b1418d8f
UD
320- Some compilers produce buggy code. No compiler gets single precision
321 complex numbers correct on Alpha. Otherwise, the egcs 1.1 release should be
322 ok; gcc 2.8.1 might cause some failures; gcc 2.7.2.x is so buggy that
323 explicit checks have been used so that you can't build with it.
b0610668
UD
324- The kernel might have bugs. For example on Linux/Alpha 2.0.34 the
325 floating point handling has quite a number of bugs and therefore most of
440d13e2 326 the test cases in the math subdirectory will fail. Linux 2.2 has
b1418d8f
UD
327 fixes for the floating point support on Alpha. The Linux/SPARC kernel has
328 also some bugs in the FPU emulation code (as of Linux 2.2.0).
d32a4020
UD
329- Other tools might have problems. For example bash 2.03 gives a
330 segmentation fault running the tst-rpmatch.sh test script.
b0610668 331
7fd18ea2
UD
332?? What is symbol versioning good for? Do I need it?
333
334{AJ} Symbol versioning solves problems that are related to interface
335changes. One version of an interface might have been introduced in a
336previous version of the GNU C library but the interface or the semantics of
337the function has been changed in the meantime. For binary compatibility
338with the old library, a newer library needs to still have the old interface
b1418d8f 339for old programs. On the other hand, new programs should use the new
7fd18ea2 340interface. Symbol versioning is the solution for this problem. The GNU
b1418d8f
UD
341libc version 2.1 uses symbol versioning by default if the installed binutils
342supports it.
7fd18ea2 343
b1418d8f
UD
344We don't advise building without symbol versioning, since you lose binary
345compatibility - forever! The binary compatibility you lose is not only
346against the previous version of the GNU libc (version 2.0) but also against
347all future versions.
7fd18ea2 348
b0610668 349
bee1e289
UD
350?? How can I compile on my fast ix86 machine a working libc for my slow
351 i386? After installing libc, programs abort with "Illegal
352 Instruction".
353
354{AJ} glibc and gcc might generate some instructions on your machine that
355aren't available on i386. You've got to tell glibc that you're configuring
356for i386 with adding i386 as your machine, for example:
357
358 ../configure --prefix=/usr i386-pc-linux-gnu
359
360And you need to tell gcc to only generate i386 code, just add `-mcpu=i386'
361(just -m386 doesn't work) to your CFLAGS.
362
363{UD} This applies not only to the i386. Compiling on a i686 for any older
364model will also fail if the above methods are not used.
365
366
61952351
UD
367? Installation and configuration issues
368
369?? Can I replace the libc on my Linux system with GNU libc?
370
f12944ec
UD
371{UD} You cannot replace any existing libc for Linux with GNU libc. It is
372binary incompatible and therefore has a different major version. You can,
373however, install it alongside your existing libc.
61952351
UD
374
375For Linux there are three major libc versions:
376 libc-4 a.out libc
377 libc-5 original ELF libc
378 libc-6 GNU libc
379
f12944ec
UD
380You can have any combination of these three installed. For more information
381consult documentation for shared library handling. The Makefiles of GNU
382libc will automatically generate the needed symbolic links which the linker
383will use.
61952351
UD
384
385?? How do I configure GNU libc so that the essential libraries
386 like libc.so go into /lib and the other into /usr/lib?
387
388{UD,AJ} Like all other GNU packages GNU libc is designed to use a base
389directory and install all files relative to this. The default is
f12944ec
UD
390/usr/local, because this is safe (it will not damage the system if installed
391there). If you wish to install GNU libc as the primary C library on your
392system, set the base directory to /usr (i.e. run configure --prefix=/usr
393<other_options>). Note that this can damage your system; see ?safety for
394details.
395
396Some systems like Linux have a filesystem standard which makes a difference
397between essential libraries and others. Essential libraries are placed in
398/lib because this directory is required to be located on the same disk
399partition as /. The /usr subtree might be found on another
400partition/disk. If you configure for Linux with --prefix=/usr, then this
401will be done automatically.
61952351
UD
402
403To install the essential libraries which come with GNU libc in /lib on
f12944ec
UD
404systems other than Linux one must explicitly request it. Autoconf has no
405option for this so you have to use a `configparms' file (see the `INSTALL'
406file for details). It should contain:
61952351
UD
407
408slibdir=/lib
409sysconfdir=/etc
410
f12944ec
UD
411The first line specifies the directory for the essential libraries, the
412second line the directory for system configuration files.
61952351
UD
413
414??safety How should I avoid damaging my system when I install GNU libc?
415
f12944ec
UD
416{ZW} If you wish to be cautious, do not configure with --prefix=/usr. If
417you don't specify a prefix, glibc will be installed in /usr/local, where it
418will probably not break anything. (If you wish to be certain, set the
419prefix to something like /usr/local/glibc2 which is not used for anything.)
61952351
UD
420
421The dangers when installing glibc in /usr are twofold:
422
423* glibc will overwrite the headers in /usr/include. Other C libraries
27e309c1
UD
424 install a different but overlapping set of headers there, so the effect
425 will probably be that you can't compile anything. You need to rename
426 /usr/include out of the way before running `make install'. (Do not throw
427 it away; you will then lose the ability to compile programs against your
428 old libc.)
61952351
UD
429
430* None of your old libraries, static or shared, can be used with a
431 different C library major version. For shared libraries this is not a
432 problem, because the filenames are different and the dynamic linker
433 will enforce the restriction. But static libraries have no version
434 information. You have to evacuate all the static libraries in
435 /usr/lib to a safe location.
436
437The situation is rather similar to the move from a.out to ELF which
438long-time Linux users will remember.
439
440?? Do I need to use GNU CC to compile programs that will use the
441 GNU C Library?
442
f12944ec
UD
443{ZW} In theory, no; the linker does not care, and the headers are supposed
444to check for GNU CC before using its extensions to the C language.
61952351 445
f12944ec
UD
446However, there are currently no ports of glibc to systems where another
447compiler is the default, so no one has tested the headers extensively
448against another compiler. You may therefore encounter difficulties. If you
449do, please report them as bugs.
61952351
UD
450
451Also, in several places GNU extensions provide large benefits in code
452quality. For example, the library has hand-optimized, inline assembly
f12944ec
UD
453versions of some string functions. These can only be used with GCC. See
454?string for details.
61952351
UD
455
456??crypt When linking with the new libc I get unresolved symbols
457 `crypt' and `setkey'. Why aren't these functions in the
458 libc anymore?
459
f12944ec
UD
460{UD} The US places restrictions on exporting cryptographic programs and
461source code. Until this law gets abolished we cannot ship the cryptographic
462functions together with glibc.
61952351 463
f12944ec
UD
464The functions are available, as an add-on (see ?addon). People in the US
465may get it from the same place they got GNU libc from. People outside the
f05f5ca3
UD
466US should get the code from ftp.gwdg.de [134.76.11.100] in the directory
467pub/linux/glibc, or another archive site outside the USA. The README explains
2f512715 468how to install the sources.
61952351 469
f12944ec
UD
470If you already have the crypt code on your system the reason for the failure
471is probably that you did not link with -lcrypt. The crypto functions are in
472a separate library to make it possible to export GNU libc binaries from the
473US.
61952351
UD
474
475?? When I use GNU libc on my Linux system by linking against
476 the libc.so which comes with glibc all I get is a core dump.
477
f12944ec 478{UD} On Linux, gcc sets the dynamic linker to /lib/ld-linux.so.1 unless the
b3864d70 479user specifies a --dynamic-linker argument. This is the name of the libc5
f12944ec 480dynamic linker, which does not work with glibc.
61952351 481
a379e56a
UD
482For casual use of GNU libc you can just specify to the linker
483 --dynamic-linker=/lib/ld-linux.so.2
61952351 484
f12944ec 485which is the glibc dynamic linker, on Linux systems. On other systems the
a379e56a
UD
486name is /lib/ld.so.1. When linking via gcc, you've got to add
487 -Wl,--dynamic-linker=/lib/ld-linux.so.2
488
489to the gcc command line.
61952351 490
f12944ec
UD
491To change your environment to use GNU libc for compiling you need to change
492the `specs' file of your gcc. This file is normally found at
61952351
UD
493
494 /usr/lib/gcc-lib/<arch>/<version>/specs
495
496In this file you have to change a few things:
497
498- change `ld-linux.so.1' to `ld-linux.so.2'
499
500- remove all expression `%{...:-lgmon}'; there is no libgmon in glibc
501
502- fix a minor bug by changing %{pipe:-} to %|
503
f12944ec
UD
504Here is what the gcc-2.7.2 specs file should look like when GNU libc is
505installed at /usr:
61952351
UD
506
507-----------------------------------------------------------------------
508*asm:
509%{V} %{v:%{!V:-V}} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*}
510
511*asm_final:
512%|
513
514*cpp:
515%{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} %{!m386:-D__i486__} %{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}
516
517*cc1:
518%{profile:-p}
519
520*cc1plus:
521
522
523*endfile:
524%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s
525
526*link:
527-m elf_i386 %{shared:-shared} %{!shared: %{!ibcs: %{!static: %{rdynamic:-export-dynamic} %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} %{static:-static}}}
528
529*lib:
530%{!shared: %{pthread:-lpthread} %{profile:-lc_p} %{!profile: -lc}}
531
532*libgcc:
533-lgcc
534
535*startfile:
536%{!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}
537
538*switches_need_spaces:
539
540
541*signed_char:
542%{funsigned-char:-D__CHAR_UNSIGNED__}
543
544*predefines:
545-D__ELF__ -Dunix -Di386 -Dlinux -Asystem(unix) -Asystem(posix) -Acpu(i386) -Amachine(i386)
546
547*cross_compile:
5480
549
550*multilib:
551. ;
552
553-----------------------------------------------------------------------
554
f12944ec
UD
555Things get a bit more complicated if you have GNU libc installed in some
556other place than /usr, i.e., if you do not want to use it instead of the old
557libc. In this case the needed startup files and libraries are not found in
558the regular places. So the specs file must tell the compiler and linker
559exactly what to use.
61952351
UD
560
561Version 2.7.2.3 does and future versions of GCC will automatically
562provide the correct specs.
563
564?? Looking through the shared libc file I haven't found the
565 functions `stat', `lstat', `fstat', and `mknod' and while
566 linking on my Linux system I get error messages. How is
567 this supposed to work?
568
f12944ec
UD
569{RM} Believe it or not, stat and lstat (and fstat, and mknod) are supposed
570to be undefined references in libc.so.6! Your problem is probably a missing
571or incorrect /usr/lib/libc.so file; note that this is a small text file now,
572not a symlink to libc.so.6. It should look something like this:
61952351 573
71bedb76 574GROUP ( libc.so.6 libc_nonshared.a )
61952351 575
83f6a990 576??excpt When I run an executable on one system which I compiled on
d89e7a96
UD
577 another, I get dynamic linker errors. Both systems have the same
578 version of glibc installed. What's wrong?
579
580{ZW} Glibc on one of these systems was compiled with gcc 2.7 or 2.8, the
581other with egcs (any version). Egcs has functions in its internal
582`libgcc.a' to support exception handling with C++. They are linked into
583any program or dynamic library compiled with egcs, whether it needs them or
584not. Dynamic libraries then turn around and export those functions again
585unless special steps are taken to prevent them.
586
587When you link your program, it resolves its references to the exception
588functions to the ones exported accidentally by libc.so. That works fine as
589long as libc has those functions. On the other system, libc doesn't have
590those functions because it was compiled by gcc 2.8, and you get undefined
591symbol errors. The symbols in question are named things like
592`__register_frame_info'.
593
594For glibc 2.0, the workaround is to not compile libc with egcs. We've also
595incorporated a patch which should prevent the EH functions sneaking into
596libc. It doesn't matter what compiler you use to compile your program.
597
598For glibc 2.1, we've chosen to do it the other way around: libc.so
599explicitly provides the EH functions. This is to prevent other shared
57b4b78a
UD
600libraries from doing it.
601
602{UD} Starting with glibc 2.1.1 you can compile glibc with gcc 2.8.1 or
603newer since we have explicitly add references to the functions causing the
604problem. But you nevertheless should use EGCS for other reasons
605(see ?binsize).
d89e7a96 606
83f6a990
UD
607{GK} On some Linux distributions for PowerPC, you can see this when you have
608built gcc or egcs from the Web sources (gcc versions 2.95 or earlier), then
609re-built glibc. This happens because in these versions of gcc, exception
610handling is implemented using an older method; the people making the
611distributions are a little ahead of their time.
612
613A quick solution to this is to find the libgcc.a file that came with the
614distribution (it would have been installed under /usr/lib/gcc-lib), do
615`ar x libgcc.a frame.o' to get the frame.o file out, and add a line saying
616`LDLIBS-c.so += frame.o' to the file `configparms' in the directory you're
617building in. You can check you've got the right `frame.o' file by running
618`nm frame.o' and checking that it has the symbols defined that you're
619missing.
620
621This will let you build glibc with the C compiler. The C++ compiler
622will still be binary incompatible with any C++ shared libraries that
623you got with your distribution.
624
61952351
UD
625?? How can I compile gcc 2.7.2.1 from the gcc source code using
626 glibc 2.x?
627
f12944ec 628{AJ} There's only correct support for glibc 2.0.x in gcc 2.7.2.3 or later.
57b4b78a 629But you should get at least gcc 2.8.1 or egcs 1.1 (or later versions)
f12944ec 630instead.
61952351
UD
631
632?? The `gencat' utility cannot process the catalog sources which
633 were used on my Linux libc5 based system. Why?
634
f12944ec
UD
635{UD} The `gencat' utility provided with glibc complies to the XPG standard.
636The older Linux version did not obey the standard, so they are not
637compatible.
61952351
UD
638
639To ease the transition from the Linux version some of the non-standard
f12944ec
UD
640features are also present in the `gencat' program of GNU libc. This mainly
641includes the use of symbols for the message number and the automatic
61952351
UD
642generation of header files which contain the needed #defines to map the
643symbols to integers.
644
f12944ec
UD
645Here is a simple SED script to convert at least some Linux specific catalog
646files to the XPG4 form:
61952351
UD
647
648-----------------------------------------------------------------------
649# Change catalog source in Linux specific format to standard XPG format.
650# Ulrich Drepper <drepper@cygnus.com>, 1996.
651#
652/^\$ #/ {
653 h
654 s/\$ #\([^ ]*\).*/\1/
655 x
656 s/\$ #[^ ]* *\(.*\)/\$ \1/
657}
658
659/^# / {
660 s/^# \(.*\)/\1/
661 G
662 s/\(.*\)\n\(.*\)/\2 \1/
663}
664-----------------------------------------------------------------------
665
da2d1bc5
UD
666?? Programs using libc have their messages translated, but other
667 behavior is not localized (e.g. collating order); why?
668
669{ZW} Translated messages are automatically installed, but the locale
f12944ec
UD
670database that controls other behaviors is not. You need to run localedef to
671install this database, after you have run `make install'. For example, to
672set up the French Canadian locale, simply issue the command
da2d1bc5
UD
673
674 localedef -i fr_CA -f ISO-8859-1 fr_CA
675
676Please see localedata/README in the source tree for further details.
677
61952351
UD
678?? I have set up /etc/nis.conf, and the Linux libc 5 with NYS
679 works great. But the glibc NIS+ doesn't seem to work.
680
f12944ec
UD
681{TK} The glibc NIS+ implementation uses a /var/nis/NIS_COLD_START file for
682storing information about the NIS+ server and their public keys, because the
683nis.conf file does not contain all the necessary information. You have to
684copy a NIS_COLD_START file from a Solaris client (the NIS_COLD_START file is
685byte order independent) or generate it with nisinit from the nis-tools
686package; available at
687
50f301a8 688 http://www.suse.de/~kukuk/linux/nisplus.html
61952351 689
da2d1bc5 690?? I have killed ypbind to stop using NIS, but glibc
3dcf8ea6 691 continues using NIS.
4d06461a 692
f12944ec
UD
693{TK} For faster NIS lookups, glibc uses the /var/yp/binding/ files from
694ypbind. ypbind 3.3 and older versions don't always remove these files, so
695glibc will continue to use them. Other BSD versions seem to work correctly.
696Until ypbind 3.4 is released, you can find a patch at
697
66f6a52b 698 <ftp://ftp.kernel.org/pub/linux/utils/net/NIS/ypbind-3.3-glibc4.diff.gz>
a788b6c2 699
3dcf8ea6
UD
700?? Under Linux/Alpha, I always get "do_ypcall: clnt_call:
701 RPC: Unable to receive; errno = Connection refused" when using NIS.
a788b6c2 702
f12944ec
UD
703{TK} You need a ypbind version which is 64bit clean. Some versions are not
70464bit clean. A 64bit clean implementation is ypbind-mt. For ypbind 3.3,
705you need the patch from ftp.kernel.org (See the previous question). I don't
706know about other versions.
a788b6c2 707
4d06461a 708
61952351
UD
709?? After installing glibc name resolving doesn't work properly.
710
f12944ec
UD
711{AJ} You probably should read the manual section describing nsswitch.conf
712(just type `info libc "NSS Configuration File"'). The NSS configuration
713file is usually the culprit.
61952351 714
3dcf8ea6
UD
715
716?? How do I create the databases for NSS?
717
718{AJ} If you have an entry "db" in /etc/nsswitch.conf you should also create
719the database files. The glibc sources contain a Makefile which does the
7fd18ea2 720necessary conversion and calls to create those files. The file is
3dcf8ea6
UD
721`db-Makefile' in the subdirectory `nss' and you can call it with `make -f
722db-Makefile'. Please note that not all services are capable of using a
723database. Currently passwd, group, ethers, protocol, rpc, services shadow
724and netgroup are implemented.
725
61952351
UD
726?? I have /usr/include/net and /usr/include/scsi as symlinks
727 into my Linux source tree. Is that wrong?
728
f12944ec
UD
729{PB} This was necessary for libc5, but is not correct when using glibc.
730Including the kernel header files directly in user programs usually does not
731work (see ?kerhdr). glibc provides its own <net/*> and <scsi/*> header
732files to replace them, and you may have to remove any symlink that you have
733in place before you install glibc. However, /usr/include/asm and
734/usr/include/linux should remain as they were.
61952351
UD
735
736?? Programs like `logname', `top', `uptime' `users', `w' and
737 `who', show incorrect information about the (number of)
738 users on my system. Why?
739
740{MK} See ?getlog.
741
742?? After upgrading to glibc 2.1 with symbol versioning I get
743 errors about undefined symbols. What went wrong?
744
f12944ec
UD
745{AJ} The problem is caused either by wrong program code or tools. In the
746versioned libc a lot of symbols are now local that were global symbols in
747previous versions. It seems that programs linked against older versions
748often accidentally used libc global variables -- something that should not
749happen.
61952351 750
f12944ec
UD
751The only way to fix this is to recompile your program. Sorry, that's the
752price you might have to pay once for quite a number of advantages with
753symbol versioning.
61952351
UD
754
755?? When I start the program XXX after upgrading the library
756 I get
757 XXX: Symbol `_sys_errlist' has different size in shared
758 object, consider re-linking
759 Why? What should I do?
760
f12944ec
UD
761{UD} As the message says, relink the binary. The problem is that a few
762symbols from the library can change in size and there is no way to avoid
763this. _sys_errlist is a good example. Occasionally there are new error
764numbers added to the kernel and this must be reflected at user level,
765breaking programs that refer to them directly.
61952351 766
f12944ec
UD
767Such symbols should normally not be used at all. There are mechanisms to
768avoid using them. In the case of _sys_errlist, there is the strerror()
769function which should _always_ be used instead. So the correct fix is to
770rewrite that part of the application.
61952351 771
f12944ec
UD
772In some situations (especially when testing a new library release) it might
773be possible that a symbol changed size when that should not have happened.
774So in case of doubt report such a warning message as a problem.
61952351 775
da2d1bc5
UD
776?? What do I need for C++ development?
777
d89e7a96
UD
778{HJ,AJ} You need either egcs 1.1 which comes directly with libstdc++ or
779gcc-2.8.1 together with libstdc++ 2.8.1.1. egcs 1.1 has the better C++
780support and works directly with glibc 2.1. If you use gcc-2.8.1 with
781libstdc++ 2.8.1.1, you need to modify libstdc++ a bit. A patch is available
782as:
66f6a52b 783 <ftp://alpha.gnu.org/gnu/libstdc++-2.8.1.1-glibc2.1-diff.gz>
d89e7a96
UD
784
785Please note that libg++ 2.7.2 (and the Linux Versions 2.7.2.x) doesn't work
786very well with the GNU C library due to vtable thunks. If you're upgrading
787from glibc 2.0.x to 2.1 you have to recompile libstdc++ since the library
788compiled for 2.0 is not compatible due to the new Large File Support (LFS)
789in version 2.1.
fb98e2bf
UD
790
791{UD} But since in the case of a shared libstdc++ the version numbers should
792be different existing programs will continue to work.
da2d1bc5 793
6ca96fe2
UD
794?? Even statically linked programs need some shared libraries
795 which is not acceptable for me. What can I do?
796
f12944ec
UD
797{AJ} NSS (for details just type `info libc "Name Service Switch"') won't
798work properly without shared libraries. NSS allows using different services
799(e.g. NIS, files, db, hesiod) by just changing one configuration file
800(/etc/nsswitch.conf) without relinking any programs. The only disadvantage
801is that now static libraries need to access shared libraries. This is
802handled transparently by the GNU C library.
6ca96fe2 803
f12944ec
UD
804A solution is to configure glibc with --enable-static-nss. In this case you
805can create a static binary that will use only the services dns and files
806(change /etc/nsswitch.conf for this). You need to link explicitly against
807all these services. For example:
6ca96fe2
UD
808
809 gcc -static test-netdb.c -o test-netdb.c \
810 -lc -lnss_files -lnss_dns -lresolv
811
812The problem with this approach is that you've got to link every static
813program that uses NSS routines with all those libraries.
814
815{UD} In fact, one cannot say anymore that a libc compiled with this
816option is using NSS. There is no switch anymore. Therefore it is
817*highly* recommended *not* to use --enable-static-nss since this makes
818the behaviour of the programs on the system inconsistent.
819
bf47fa23
UD
820?? I just upgraded my Linux system to glibc and now I get
821 errors whenever I try to link any program.
822
823{ZW} This happens when you have installed glibc as the primary C library but
824have stray symbolic links pointing at your old C library. If the first
825`libc.so' the linker finds is libc 5, it will use that. Your program
826expects to be linked with glibc, so the link fails.
827
828The most common case is that glibc put its `libc.so' in /usr/lib, but there
829was a `libc.so' from libc 5 in /lib, which gets searched first. To fix the
830problem, just delete /lib/libc.so. You may also need to delete other
831symbolic links in /lib, such as /lib/libm.so if it points to libm.so.5.
832
0e0316f4
UD
833{AJ} The perl script test-installation.pl which is run as last step during
834an installation of glibc that is configured with --prefix=/usr should help
835detect these situations. If the script reports problems, something is
836really screwed up.
837
48244d09
UD
838?? When I use nscd the machine freezes.
839
d89e7a96
UD
840{UD} You cannot use nscd with Linux 2.0.*. There is functionality missing
841in the kernel and work-arounds are not suitable. Besides, some parts of the
842kernel are too buggy when it comes to using threads.
48244d09 843
440d13e2 844If you need nscd, you have to use at least a 2.1 kernel.
48244d09
UD
845
846Note that I have at this point no information about any other platform.
847
0155a773
UD
848?? I need lots of open files. What do I have to do?
849
850{AJ} This is at first a kernel issue. The kernel defines limits with
851OPEN_MAX the number of simultaneous open files and with FD_SETSIZE the
852number of used file descriptors. You need to change these values in your
853kernel and recompile the kernel so that the kernel allows to use more open
854files. You don't necessarily need to recompile the GNU C library since the
855only place where OPEN_MAX and FD_SETSIZE is really needed in the library
856itself is the size of fd_set which is used by select.
857
7b19af68
UD
858The GNU C library is now select free. This means it internally has no
859limits imposed by the `fd_set' type. Instead all places where the
0155a773
UD
860functionality is needed the `poll' function is used.
861
862If you increase the number of file descriptors in the kernel you don't need
7b19af68 863to recompile the C library.
0155a773
UD
864
865{UD} You can always get the maximum number of file descriptors a process is
866allowed to have open at any time using
867
868 number = sysconf (_SC_OPEN_MAX);
869
870This will work even if the kernel limits change.
871
d8a167a5
UD
872?? How do I get the same behavior on parsing /etc/passwd and
873 /etc/group as I have with libc5 ?
874
875{TK} The name switch setup in /etc/nsswitch.conf selected by most Linux
876distributions does not support +/- and netgroup entries in the files like
877/etc/passwd. Though this is the preferred setup some people might have
878setups coming over from the libc5 days where it was the default to recognize
879lines like this. To get back to the old behaviour one simply has to change
880the rules for passwd, group, and shadow in the nsswitch.conf file as
881follows:
882
883passwd: compat
884group: compat
885shadow: compat
886
887passwd_compat: nis
888group_compat: nis
889shadow_compat: nis
890
4f7ea427 891??libs What needs to be recompiled when upgrading from glibc 2.0 to glibc
0f6052a8
UD
892 2.1?
893
894{AJ,CG} If you just upgrade the glibc from 2.0.x (x <= 7) to 2.1, binaries
895that have been linked against glibc 2.0 will continue to work.
896
897If you compile your own binaries against glibc 2.1, you also need to
898recompile some other libraries. The problem is that libio had to be
899changed and therefore libraries that are based or depend on the libio
900of glibc, e.g. ncurses or slang, need to be recompiled. If you
901experience strange segmentation faults in your programs linked against
902glibc 2.1, you might need to recompile your libraries.
903
904Another problem is that older binaries that were linked statically against
905glibc 2.0 will reference the older nss modules (libnss_files.so.1 instead of
906libnss_files.so.2), so don't remove them. Also, the old glibc-2.0 compiled
907static libraries (libfoo.a) which happen to depend on the older libio
50b65db1
UD
908behavior will be broken by the glibc 2.1 upgrade. We plan to produce a
909compatibility library that people will be able to link in if they want
910to compile a static library generated against glibc 2.0 into a program
911on a glibc 2.1 system. You just add -lcompat and you should be fine.
912
913The glibc-compat add-on will provide the libcompat.a library, the older
914nss modules, and a few other files. Together, they should make it
915possible to do development with old static libraries on a glibc 2.1
8d8c6efa 916system. This add-on is still in development. You can get it from
66f6a52b 917 <ftp://alpha.gnu.org/gnu/glibc-compat-2.1.tar.gz>
50b65db1 918but please keep in mind that it is experimental.
0155a773 919
b7398be5
UD
920?? Why is extracting files via tar so slow?
921
922{AJ} Extracting of tar archives might be quite slow since tar has to look up
923userid and groupids and doesn't cache negative results. If you have nis or
924nisplus in your /etc/nsswitch.conf for the passwd and/or group database,
925each file extractions needs a network connection. There are two possible
926solutions:
927
928- do you really need NIS/NIS+ (some Linux distributions add by default
929 nis/nisplus even if it's not needed)? If not, just remove the entries.
930
931- if you need NIS/NIS+, use the Name Service Cache Daemon nscd that comes
932 with glibc 2.1.
933
2ee511d9
UD
934?? Compiling programs I get parse errors in libio.h (e.g. "parse error
935 before `_IO_seekoff'"). How should I fix this?
936
937{AJ} You might get the following errors when upgrading to glibc 2.1:
938
939 In file included from /usr/include/stdio.h:57,
940 from ...
941 /usr/include/libio.h:335: parse error before `_IO_seekoff'
942 /usr/include/libio.h:335: parse error before `_G_off64_t'
943 /usr/include/libio.h:336: parse error before `_IO_seekpos'
944 /usr/include/libio.h:336: parse error before `_G_fpos64_t'
945
946The problem is a wrong _G_config.h file in your include path. The
947_G_config.h file that comes with glibc 2.1 should be used and not one from
948libc5 or from a compiler directory. To check which _G_config.h file the
949compiler uses, compile your program with `gcc -E ...|grep G_config.h' and
950remove that file. Your compiler should pick up the file that has been
951installed by glibc 2.1 in your include directory.
952
4f7ea427
UD
953?? After upgrading to glibc 2.1, libraries that were compiled against
954 glibc 2.0.x don't work anymore.
955
956{AJ} See ?libs.
957
2ee511d9 958
61952351
UD
959? Source and binary incompatibilities, and what to do about them
960
961?? I expect GNU libc to be 100% source code compatible with
962 the old Linux based GNU libc. Why isn't it like this?
963
f12944ec
UD
964{DMT,UD} Not every extension in Linux libc's history was well thought-out.
965In fact it had a lot of problems with standards compliance and with
966cleanliness. With the introduction of a new version number these errors can
967now be corrected. Here is a list of the known source code
61952351
UD
968incompatibilities:
969
970* _GNU_SOURCE: glibc does not make the GNU extensions available
971 automatically. If a program depends on GNU extensions or some
972 other non-standard functionality, it is necessary to compile it
973 with the C compiler option -D_GNU_SOURCE, or better, to put
974 `#define _GNU_SOURCE' at the beginning of your source files, before
975 any C library header files are included. This difference normally
976 manifests itself in the form of missing prototypes and/or data type
977 definitions. Thus, if you get such errors, the first thing you
978 should do is try defining _GNU_SOURCE and see if that makes the
979 problem go away.
980
981 For more information consult the file `NOTES' in the GNU C library
982 sources.
983
984* reboot(): GNU libc sanitizes the interface of reboot() to be more
985 compatible with the interface used on other OSes. reboot() as
986 implemented in glibc takes just one argument. This argument
987 corresponds to the third argument of the Linux reboot system call.
988 That is, a call of the form reboot(a, b, c) needs to be changed into
989 reboot(c). Beside this the header <sys/reboot.h> defines the needed
990 constants for the argument. These RB_* constants should be used
991 instead of the cryptic magic numbers.
992
993* swapon(): the interface of this function didn't change, but the
994 prototype is in a separate header file <sys/swap.h>. This header
995 file also provides the SWAP_* constants defined by <linux/swap.h>;
996 you should use them for the second argument to swapon().
997
998* errno: If a program uses the variable "errno", then it _must_
999 include <errno.h>. The old libc often (erroneously) declared this
1000 variable implicitly as a side-effect of including other libc header
1001 files. glibc is careful to avoid such namespace pollution, which,
1002 in turn, means that you really need to include the header files that
1003 you depend on. This difference normally manifests itself in the
1004 form of the compiler complaining about references to an undeclared
1005 symbol "errno".
1006
1007* Linux-specific syscalls: All Linux system calls now have appropriate
1008 library wrappers and corresponding declarations in various header files.
1009 This is because the syscall() macro that was traditionally used to
1010 work around missing syscall wrappers are inherently non-portable and
1011 error-prone. The following table lists all the new syscall stubs,
1012 the header-file declaring their interface and the system call name.
1013
1014 syscall name: wrapper name: declaring header file:
1015 ------------- ------------- ----------------------
1016 bdflush bdflush <sys/kdaemon.h>
1017 syslog ksyslog_ctl <sys/klog.h>
1018
1019* lpd: Older versions of lpd depend on a routine called _validuser().
1020 The library does not provide this function, but instead provides
1021 __ivaliduser() which has a slightly different interface. Simply
1022 upgrading to a newer lpd should fix this problem (e.g., the 4.4BSD
1023 lpd is known to be working).
1024
1025* resolver functions/BIND: like on many other systems the functions of
1026 the resolver library are not included in libc itself. There is a
1027 separate library libresolv. If you get undefined symbol errors for
1028 symbols starting with `res_*' simply add -lresolv to your linker
1029 command line.
1030
1031* the `signal' function's behavior corresponds to the BSD semantic and
1032 not the SysV semantic as it was in libc-5. The interface on all GNU
1033 systems shall be the same and BSD is the semantic of choice. To use
1034 the SysV behavior simply use `sysv_signal', or define _XOPEN_SOURCE.
1035 See ?signal for details.
1036
1037??getlog Why does getlogin() always return NULL on my Linux box?
1038
f12944ec
UD
1039{UD} The GNU C library has a format for the UTMP and WTMP file which differs
1040from what your system currently has. It was extended to fulfill the needs
1041of the next years when IPv6 is introduced. The record size is different and
1042some fields have different positions. The files written by functions from
1043the one library cannot be read by functions from the other library. Sorry,
1044but this is what a major release is for. It's better to have a cut now than
1045having no means to support the new techniques later.
61952351 1046
f12944ec
UD
1047{MK} There is however a (partial) solution for this problem. Please take a
1048look at the file `login/README.utmpd'.
61952351
UD
1049
1050?? Where are the DST_* constants found in <sys/time.h> on many
1051 systems?
1052
f12944ec
UD
1053{UD} These constants come from the old BSD days and are not used anymore
1054(libc5 does not actually implement the handling although the constants are
1055defined).
61952351 1056
f12944ec 1057Instead GNU libc contains zone database support and compatibility code for
8b4a4715
UD
1058POSIX TZ environment variable handling. For former is very much preferred
1059(see ?tzdb).
61952351
UD
1060
1061?? The prototypes for `connect', `accept', `getsockopt',
1062 `setsockopt', `getsockname', `getpeername', `send',
1063 `sendto', and `recvfrom' are different in GNU libc from
1064 any other system I saw. This is a bug, isn't it?
1065
f12944ec
UD
1066{UD} No, this is no bug. This version of GNU libc already follows the new
1067Single Unix specifications (and I think the POSIX.1g draft which adopted the
1068solution). The type for a parameter describing a size is now `socklen_t', a
1069new type.
61952351
UD
1070
1071??kerhdr On Linux I've got problems with the declarations in Linux
1072 kernel headers.
1073
f12944ec
UD
1074{UD,AJ} On Linux, the use of kernel headers is reduced to the minimum. This
1075gives Linus the ability to change the headers more freely. Also, user
a9ddb793 1076programs are now insulated from changes in the size of kernel data
f12944ec 1077structures.
61952351 1078
f12944ec
UD
1079For example, the sigset_t type is 32 or 64 bits wide in the kernel. In
1080glibc it is 1024 bits wide. This guarantees that when the kernel gets a
1081bigger sigset_t (for POSIX.1e realtime support, say) user programs will not
1082have to be recompiled. Consult the header files for more information about
1083the changes.
61952351 1084
f12944ec
UD
1085Therefore you shouldn't include Linux kernel header files directly if glibc
1086has defined a replacement. Otherwise you might get undefined results because
1087of type conflicts.
61952351
UD
1088
1089?? I don't include any kernel headers myself but the compiler
1090 still complains about redeclarations of types in the kernel
1091 headers.
1092
f12944ec
UD
1093{UD} The kernel headers before Linux 2.1.61 and 2.0.32 don't work correctly
1094with glibc. Compiling C programs is possible in most cases but C++ programs
1095have (due to the change of the name lookups for `struct's) problems. One
1096prominent example is `struct fd_set'.
61952351 1097
f12944ec
UD
1098There might be some problems left but 2.1.61/2.0.32 fix most of the known
1099ones. See the BUGS file for other known problems.
61952351
UD
1100
1101??signal Why don't signals interrupt system calls anymore?
1102
f12944ec
UD
1103{ZW} By default GNU libc uses the BSD semantics for signal(), unlike Linux
1104libc 5 which used System V semantics. This is partially for compatibility
1105with other systems and partially because the BSD semantics tend to make
1106programming with signals easier.
61952351
UD
1107
1108There are three differences:
1109
1110* BSD-style signals that occur in the middle of a system call do not
1111 affect the system call; System V signals cause the system call to
1112 fail and set errno to EINTR.
1113
1114* BSD signal handlers remain installed once triggered. System V signal
1115 handlers work only once, so one must reinstall them each time.
1116
1117* A BSD signal is blocked during the execution of its handler. In other
1118 words, a handler for SIGCHLD (for example) does not need to worry about
1119 being interrupted by another SIGCHLD. It may, however, be interrupted
1120 by other signals.
1121
1122There is general consensus that for `casual' programming with signals, the
1123BSD semantics are preferable. You don't need to worry about system calls
1124returning EINTR, and you don't need to worry about the race conditions
1125associated with one-shot signal handlers.
1126
1127If you are porting an old program that relies on the old semantics, you can
1128quickly fix the problem by changing signal() to sysv_signal() throughout.
1129Alternatively, define _XOPEN_SOURCE before including <signal.h>.
1130
1131For new programs, the sigaction() function allows you to specify precisely
1132how you want your signals to behave. All three differences listed above are
1133individually switchable on a per-signal basis with this function.
1134
f12944ec
UD
1135If all you want is for one specific signal to cause system calls to fail and
1136return EINTR (for example, to implement a timeout) you can do this with
61952351
UD
1137siginterrupt().
1138
1139
1140??string I've got errors compiling code that uses certain string
1141 functions. Why?
1142
f12944ec 1143{AJ} glibc 2.1 has special string functions that are faster than the normal
fdacb17d 1144library functions. Some of the functions are additionally implemented as
a9d75566
UD
1145inline functions and others as macros. This might lead to problems with
1146existing codes but it is explicitly allowed by ISO C.
61952351
UD
1147
1148The optimized string functions are only used when compiling with
fdacb17d 1149optimizations (-O1 or higher). The behavior can be changed with two feature
f12944ec 1150macros:
61952351
UD
1151
1152* __NO_STRING_INLINES: Don't do any string optimizations.
1153* __USE_STRING_INLINES: Use assembly language inline functions (might
1154 increase code size dramatically).
1155
f12944ec
UD
1156Since some of these string functions are now additionally defined as macros,
1157code like "char *strncpy();" doesn't work anymore (and is unnecessary, since
fdacb17d 1158<string.h> has the necessary declarations). Either change your code or
f12944ec 1159define __NO_STRING_INLINES.
61952351 1160
f12944ec
UD
1161{UD} Another problem in this area is that gcc still has problems on machines
1162with very few registers (e.g., ix86). The inline assembler code can require
1163almost all the registers and the register allocator cannot always handle
1164this situation.
61952351
UD
1165
1166One can disable the string optimizations selectively. Instead of writing
1167
1168 cp = strcpy (foo, "lkj");
1169
1170one can write
1171
1172 cp = (strcpy) (foo, "lkj");
1173
1174This disables the optimization for that specific call.
1175
4775243a
UD
1176?? I get compiler messages "Initializer element not constant" with
1177 stdin/stdout/stderr. Why?
1178
1179{RM,AJ} Constructs like:
66f6a52b 1180 static FILE *InPtr = stdin;
4775243a 1181
fdacb17d
UD
1182lead to this message. This is correct behaviour with glibc since stdin is
1183not a constant expression. Please note that a strict reading of ISO C does
f12944ec 1184not allow above constructs.
4775243a 1185
f12944ec
UD
1186One of the advantages of this is that you can assign to stdin, stdout, and
1187stderr just like any other global variable (e.g. `stdout = my_stream;'),
1188which can be very useful with custom streams that you can write with libio
fdacb17d 1189(but beware this is not necessarily portable). The reason to implement it
f12944ec 1190this way were versioning problems with the size of the FILE structure.
4775243a 1191
fdacb17d
UD
1192To fix those programs you've got to initialize the variable at run time.
1193This can be done, e.g. in main, like:
1194
66f6a52b
UD
1195 static FILE *InPtr;
1196 int main(void)
1197 {
1198 InPtr = stdin;
1199 }
fdacb17d
UD
1200
1201or by constructors (beware this is gcc specific):
1202
66f6a52b
UD
1203 static FILE *InPtr;
1204 static void inPtr_construct (void) __attribute__((constructor));
1205 static void inPtr_construct (void) { InPtr = stdin; }
fdacb17d 1206
4775243a
UD
1207
1208?? I can't compile with gcc -traditional (or
1209 -traditional-cpp). Why?
1210
1211{AJ} glibc2 does break -traditional and -traditonal-cpp - and will continue
fdacb17d 1212to do so. For example constructs of the form:
f12944ec 1213
66f6a52b
UD
1214 enum {foo
1215 #define foo foo
1216 }
f12944ec
UD
1217
1218are useful for debugging purposes (you can use foo with your debugger that's
1219why we need the enum) and for compatibility (other systems use defines and
1220check with #ifdef).
4775243a
UD
1221
1222?? I get some errors with `gcc -ansi'. Isn't glibc ANSI compatible?
1223
1224{AJ} The GNU C library is compatible with the ANSI/ISO C standard. If
f12944ec 1225you're using `gcc -ansi', the glibc includes which are specified in the
fdacb17d 1226standard follow the standard. The ANSI/ISO C standard defines what has to be
f12944ec
UD
1227in the include files - and also states that nothing else should be in the
1228include files (btw. you can still enable additional standards with feature
1229flags).
4775243a 1230
f12944ec
UD
1231The GNU C library is conforming to ANSI/ISO C - if and only if you're only
1232using the headers and library functions defined in the standard.
4775243a 1233
4d42000c
UD
1234?? I can't access some functions anymore. nm shows that they do
1235 exist but linking fails nevertheless.
1236
f12944ec
UD
1237{AJ} With the introduction of versioning in glibc 2.1 it is possible to
1238export only those identifiers (functions, variables) that are really needed
1239by application programs and by other parts of glibc. This way a lot of
1240internal interfaces are now hidden. nm will still show those identifiers
1241but marking them as internal. ISO C states that identifiers beginning with
1242an underscore are internal to the libc. An application program normally
1243shouldn't use those internal interfaces (there are exceptions,
1244e.g. __ivaliduser). If a program uses these interfaces, it's broken. These
1245internal interfaces might change between glibc releases or dropped
1246completely.
4d42000c 1247
a5f4e34a
UD
1248?? When using the db-2 library which comes with glibc is used in
1249 the Perl db modules the testsuite is not passed. This did not
1250 happen with db-1, gdbm, or ndbm.
1251
34df6c30
UD
1252{MK} Db-2 does not support zero-sized keys. The Perl testsuite
1253tests the support for zero-sized keys and therefore fails when db-2 is
1254used. The Perl folks are looking for a solution, but thus far have
1255not found a satisfactory one.
a5f4e34a 1256
5148d49f
UD
1257?? The pow() inline function I get when including <math.h> is broken.
1258 I get segmentation faults when I run the program.
1259
1260{UD} Nope, the implementation is correct. The problem is with egcs version
1261prior to 1.1. I.e., egcs 1.0 to 1.0.3 are all broken (at least on Intel).
1262If you have to use this compiler you must define __NO_MATH_INLINES before
1263including <math.h> to prevent the inline functions from being used. egcs 1.1
1264fixes the problem. I don't know about gcc 2.8 and 2.8.1.
1265
05f732b3
UD
1266?? The sys/sem.h file lacks the definition of `union semun'.
1267
1268{UD} Nope. This union has to be provided by the user program. Former glibc
1269versions defined this but it was an error since it does not make much sense
1270when thinking about it. The standards describing the System V IPC functions
1271define it this way and therefore programs must be adopted.
1272
a42134a7
UD
1273?? Why has <netinet/ip_fw.h> disappeared?
1274
1275{AJ} The corresponding Linux kernel data structures and constants are
440d13e2 1276totally different in Linux 2.0 and Linux 2.2. This situation has to be
a42134a7
UD
1277taken care in user programs using the firewall structures and therefore
1278those programs (ipfw is AFAIK the only one) should deal with this problem
1279themselves.
1280
ee586e0e
UD
1281?? I get floods of warnings when I use -Wconversion and include
1282 <string.h> or <math.h>.
1283
1284{ZW} <string.h> and <math.h> intentionally use prototypes to override
1285argument promotion. -Wconversion warns about all these. You can safely
1286ignore the warnings.
1287
1288-Wconversion isn't really intended for production use, only for shakedown
1289compiles after converting an old program to standard C.
1290
4d42000c 1291
49b75f5e
UD
1292?? After upgrading to glibc 2.1, I receive errors about
1293 unresolved symbols, like `_dl_initial_searchlist' and can not
1294 execute any binaries. What went wrong?
1295
1296{AJ} This normally happens if your libc and ld (dynamic linker) are from
1297different releases of glibc. For example, the dynamic linker
1298/lib/ld-linux.so.2 comes from glibc 2.0.x, but the version of libc.so.6 is
1299from glibc 2.1.
1300
1301The path /lib/ld-linux.so.2 is hardcoded in every glibc2 binary but
1302libc.so.6 is searched via /etc/ld.so.cache and in some special directories
1303like /lib and /usr/lib. If you run configure with another prefix than /usr
1304and put this prefix before /lib in /etc/ld.so.conf, your system will break.
1305
1306So what can you do? Either of the following should work:
1307
1308* Run `configure' with the same prefix argument you've used for glibc 2.0.x
1309 so that the same paths are used.
1310* Replace /lib/ld-linux.so.2 with a link to the dynamic linker from glibc
1311 2.1.
1312
1313You can even call the dynamic linker by hand if everything fails. You've
1314got to set LD_LIBRARY_PATH so that the corresponding libc is found and also
1315need to provide an absolute path to your binary:
1316
1317 LD_LIBRARY_PATH=<path-where-libc.so.6-lives> \
1318 <path-where-corresponding-dynamic-linker-lives>/ld-linux.so.2 \
1319 <path-to-binary>/binary
1320
1321For example `LD_LIBRARY_PATH=/libold /libold/ld-linux.so.2 /bin/mv ...'
1322might be useful in fixing a broken system (if /libold contains dynamic
1323linker and corresponding libc).
1324
1325With that command line no path is used. To further debug problems with the
1326dynamic linker, use the LD_DEBUG environment variable, e.g.
1327`LD_DEBUG=help echo' for the help text.
1328
1329If you just want to test this release, don't put the lib directory in
1330/etc/ld.so.conf. You can call programs directly with full paths (as above).
1331When compiling new programs against glibc 2.1, you've got to specify the
1332correct paths to the compiler (option -I with gcc) and linker (options
1333--dynamic-linker, -L and --rpath).
1334
b74656f9 1335?? bonnie reports that char i/o with glibc 2 is much slower than with
9f6b6d8d
UD
1336 libc5. What can be done?
1337
1338{AJ} The GNU C library uses thread safe functions by default and libc5 used
1339non thread safe versions. The non thread safe functions have in glibc the
1340suffix `_unlocked', for details check <stdio.h>. Using `putc_unlocked' etc.
1341instead of `putc' should give nearly the same speed with bonnie (bonnie is a
1342benchmark program for measuring disk access).
1343
b93492aa
UD
1344?? Programs compiled with glibc 2.1 can't read db files made with glibc
1345 2.0. What has changed that programs like rpm break?
1346
1347{AJ} The GNU C library 2.1 uses db2 instead of db1 which was used in version
13482.0. The internal formats of the actual db files are different. To convert
1349the db files from db1 format to db2 format, you can use the programs
1350`db_dump185' and `db_load'. Alternativly programs can be linked with db1
1351using `-ldb1' instead of linking with db2 which uses `-ldb'. Linking with
1352db1 might be preferable if older programs need to access the db file.
1353
1354db2 supports the old db1 programming interface and also a new programming
1355interface. For compilation with the old API, <db_185.h> has to be included
1356(and not <db.h>) and you can link with either `-ldb1' or `-ldb' for either
1357of the db formats.
1358
8a40ed68
UD
1359?? Autoconf's AC_CHECK_FUNC macro reports that a function exists, but
1360 when I try to use it, it always returns -1 and sets errno to ENOSYS.
1361
1362{ZW} You are using a 2.0 Linux kernel, and the function you are trying to
1363use is only implemented in 2.1/2.2. Libc considers this to be a function
1364which exists, because if you upgrade to a 2.2 kernel, it will work. One
1365such function is sigaltstack.
1366
1367Your program should check at runtime whether the function works, and
1368implement a fallback. Note that Autoconf cannot detect unimplemented
1369functions in other systems' C libraries, so you need to do this anyway.
1370
b5a9efcd
UD
1371?? My program segfaults when I call fclose() on the FILE* returned
1372 from setmntent(). Is this a glibc bug?
1373
1374{GK} No. Don't do this. Use endmntent(), that's what it's for.
1375
1376In general, you should use the correct deallocation routine. For instance,
1377if you open a file using fopen(), you should deallocate the FILE * using
1378fclose(), not free(), even though the FILE * is also a pointer.
1379
1380In the case of setmntent(), it may appear to work in most cases, but it
1381won't always work. Unfortunately, for compatibility reasons, we can't
1382change the return type of setmntent() to something other than FILE *.
1383
49b75f5e 1384
61952351
UD
1385? Miscellaneous
1386
1387?? After I changed configure.in I get `Autoconf version X.Y.
1388 or higher is required for this script'. What can I do?
1389
1390{UD} You have to get the specified autoconf version (or a later one)
2eb45444 1391from your favorite mirror of ftp.gnu.org.
61952351
UD
1392
1393?? When I try to compile code which uses IPv6 headers and
1394 definitions on my Linux 2.x.y system I am in trouble.
1395 Nothing seems to work.
1396
f12944ec
UD
1397{UD} The problem is that IPv6 development still has not reached a point
1398where the headers are stable. There are still lots of incompatible changes
1399made and the libc headers have to follow.
61952351 1400
cb0509a8
UD
1401{PB} The 2.1 release of GNU libc aims to comply with the current versions of
1402all the relevant standards. The IPv6 support libraries for older Linux
1403systems used a different naming convention and so code written to work with
1404them may need to be modified. If the standards make incompatible changes in
1405the future then the libc may need to change again.
1406
1407IPv6 will not work with a 2.0.x kernel. When kernel 2.2 is released it
1408should contain all the necessary support; until then you should use the
3f7b3d9b 1409latest 2.1.x release you can find. As of 98/11/26 the currently recommended
cb0509a8
UD
1410kernel for IPv6 is 2.1.129.
1411
1412Also, as of the 2.1 release the IPv6 API provided by GNU libc is not
1413100% complete. In particular the getipnodebyname and getipnodebyaddr
1414functions are not implemented.
61952351 1415
8b4a4715 1416??tzdb When I set the timezone by setting the TZ environment variable
73237de3
UD
1417 to EST5EDT things go wrong since glibc computes the wrong time
1418 from this information.
1419
f12944ec
UD
1420{UD} The problem is that people still use the braindamaged POSIX method to
1421select the timezone using the TZ environment variable with a format EST5EDT
8b4a4715
UD
1422or whatever. People, if you insist on using TZ instead of the timezone
1423database (see below), read the POSIX standard, the implemented behaviour is
f12944ec
UD
1424correct! What you see is in fact the result of the decisions made while
1425POSIX.1 was created. We've only implemented the handling of TZ this way to
1426be POSIX compliant. It is not really meant to be used.
1427
1428The alternative approach to handle timezones which is implemented is the
1429correct one to use: use the timezone database. This avoids all the problems
1430the POSIX method has plus it is much easier to use. Simply run the tzselect
1431shell script, answer the question and use the name printed in the end by
8b4a4715
UD
1432making a symlink /etc/localtime pointing to /usr/share/zoneinfo/NAME (NAME
1433is the returned value from tzselect). That's all. You never again have to
1434worry.
f12944ec
UD
1435
1436So, please avoid sending bug reports about time related problems if you use
1437the POSIX method and you have not verified something is really broken by
1438reading the POSIX standards.
73237de3 1439
fdacb17d
UD
1440?? What other sources of documentation about glibc are available?
1441
1442{AJ} The FSF has a page about the GNU C library at
1443<http://www.gnu.org/software/libc/>. The problem data base of open and
1444solved bugs in GNU libc is available at
1445<http://www-gnats.gnu.org:8080/cgi-bin/wwwgnats.pl>. Eric Green has written
1446a HowTo for converting from Linux libc5 to glibc2. The HowTo is accessable
1447via the FSF page and at <http://www.imaxx.net/~thrytis/glibc>. Frodo
1448Looijaard describes a different way installing glibc2 as secondary libc at
1449<http://huizen.dds.nl/~frodol/glibc>.
1450
1451Please note that this is not a complete list.
1452
3f7b3d9b
UD
1453?? The timezone string for Sydney/Australia is wrong since even when
1454 daylight saving time is in effect the timezone string is EST.
1455
1456{UD} The problem for some timezones is that the local authorities decided
1457to use the term "summer time" instead of "daylight saving time". In this
1458case the abbreviation character `S' is the same as the standard one. So,
1459for Sydney we have
1460
1461 Eastern Standard Time = EST
1462 Eastern Summer Time = EST
1463
1464Great! To get this bug fixed convince the authorities to change the laws
1465and regulations of the country this effects. glibc behaves correctly.
1466
eeabe877
UD
1467??make I've build make 3.77 against glibc 2.1 and now make gets
1468 segmentation faults.
1469
1470{AJ} GNU make 3.77 has support for 64 bit filesystems which is slightly
1471broken (and one of the new features in the GNU C library 2.1 is 64 bit
1472filesystem support :-( ). To get a working make you can use either make
14733.75 or patch 3.77. A working patch is available via RedHat's Rawhide server
1474(ftp://rawhide.redhat.com/SRPMS/SRPMS/make-3.77-*src.rpm).
1475
61952351
UD
1476\f
1477Answers were given by:
1478{UD} Ulrich Drepper, <drepper@cygnus.com>
1479{DMT} David Mosberger-Tang, <davidm@AZStarNet.com>
1480{RM} Roland McGrath, <roland@gnu.org>
1481{AJ} Andreas Jaeger, <aj@arthur.rhein-neckar.de>
1482{EY} Eric Youngdale, <eric@andante.jic.com>
1483{PB} Phil Blundell, <Philip.Blundell@pobox.com>
1484{MK} Mark Kettenis, <kettenis@phys.uva.nl>
1485{ZW} Zack Weinberg, <zack@rabi.phys.columbia.edu>
50f301a8 1486{TK} Thorsten Kukuk, <kukuk@suse.de>
8619129f 1487{GK} Geoffrey Keating, <geoffk@ozemail.com.au>
da2d1bc5 1488{HJ} H.J. Lu, <hjl@gnu.org>
0f6052a8 1489{CG} Cristian Gafton, <gafton@redhat.com>
61952351
UD
1490\f
1491Local Variables:
1492 mode:outline
1493 outline-regexp:"\\?"
f12944ec 1494 fill-column:76
61952351 1495End:
This page took 0.213518 seconds and 5 git commands to generate.