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