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