]> 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?
251.4. Do I need a special linker or archiver?
8619129f 261.5. Which compiler should I use for powerpc?
4775243a 271.6. Do I need some more things to compile GNU C Library?
a35cb74d 281.7. What version of the Linux kernel headers should be used?
f12944ec
UD
291.8. The compiler hangs while building iconvdata modules. What's
30 wrong?
311.9. When I run `nm -u libc.so' on the produced library I still
61952351 32 find unresolved symbols. Can this be ok?
f12944ec
UD
331.10. What are these `add-ons'?
341.11. My XXX kernel emulates a floating-point coprocessor for me.
61952351 35 Should I enable --with-fp?
f12944ec 361.12. When compiling GNU libc I get lots of errors saying functions
61952351 37 in glibc are duplicated in libgcc.
f12944ec 381.13. Why do I get messages about missing thread functions when I use
a35cb74d 39 librt? I don't even use threads.
f12944ec 401.14. What's the problem with configure --enable-omitfp?
b0610668 411.15. I get failures during `make check'. What shall I do?
61952351
UD
42
432. Installation and configuration issues
44
452.1. Can I replace the libc on my Linux system with GNU libc?
462.2. How do I configure GNU libc so that the essential libraries
47 like libc.so go into /lib and the other into /usr/lib?
482.3. How should I avoid damaging my system when I install GNU libc?
492.4. Do I need to use GNU CC to compile programs that will use the
50 GNU C Library?
512.5. When linking with the new libc I get unresolved symbols
52 `crypt' and `setkey'. Why aren't these functions in the
53 libc anymore?
542.6. When I use GNU libc on my Linux system by linking against
55 the libc.so which comes with glibc all I get is a core dump.
562.7. Looking through the shared libc file I haven't found the
57 functions `stat', `lstat', `fstat', and `mknod' and while
58 linking on my Linux system I get error messages. How is
59 this supposed to work?
602.8. How can I compile gcc 2.7.2.1 from the gcc source code using
61 glibc 2.x?
622.9. The `gencat' utility cannot process the catalog sources which
63 were used on my Linux libc5 based system. Why?
a35cb74d
UD
642.10. Programs using libc have their messages translated, but other
65 behavior is not localized (e.g. collating order); why?
662.11. I have set up /etc/nis.conf, and the Linux libc 5 with NYS
61952351 67 works great. But the glibc NIS+ doesn't seem to work.
a35cb74d 682.12. I have killed ypbind to stop using NIS, but glibc
3dcf8ea6 69 continues using NIS.
a35cb74d 702.13. Under Linux/Alpha, I always get "do_ypcall: clnt_call:
3dcf8ea6 71 RPC: Unable to receive; errno = Connection refused" when using NIS.
a35cb74d 722.14. After installing glibc name resolving doesn't work properly.
3dcf8ea6
UD
732.15. How do I create the databases for NSS?
742.16. I have /usr/include/net and /usr/include/scsi as symlinks
61952351 75 into my Linux source tree. Is that wrong?
3dcf8ea6 762.17. Programs like `logname', `top', `uptime' `users', `w' and
61952351
UD
77 `who', show incorrect information about the (number of)
78 users on my system. Why?
3dcf8ea6 792.18. After upgrading to glibc 2.1 with symbol versioning I get
61952351 80 errors about undefined symbols. What went wrong?
3dcf8ea6 812.19. When I start the program XXX after upgrading the library
61952351
UD
82 I get
83 XXX: Symbol `_sys_errlist' has different size in shared
84 object, consider re-linking
85 Why? What should I do?
3dcf8ea6
UD
862.20. What do I need for C++ development?
872.21. Even statically linked programs need some shared libraries
ff44f2a5 88 which is not acceptable for me. What can I do?
fdacb17d
UD
892.22. I just upgraded my Linux system to glibc and now I get
90 errors whenever I try to link any program.
61952351
UD
91
923. Source and binary incompatibilities, and what to do about them
93
943.1. I expect GNU libc to be 100% source code compatible with
95 the old Linux based GNU libc. Why isn't it like this?
963.2. Why does getlogin() always return NULL on my Linux box?
973.3. Where are the DST_* constants found in <sys/time.h> on many
98 systems?
993.4. The prototypes for `connect', `accept', `getsockopt',
100 `setsockopt', `getsockname', `getpeername', `send',
101 `sendto', and `recvfrom' are different in GNU libc from
102 any other system I saw. This is a bug, isn't it?
1033.5. On Linux I've got problems with the declarations in Linux
104 kernel headers.
1053.6. I don't include any kernel headers myself but the compiler
106 still complains about redeclarations of types in the kernel
107 headers.
1083.7. Why don't signals interrupt system calls anymore?
1093.8. I've got errors compiling code that uses certain string
110 functions. Why?
4775243a
UD
1113.9. I get compiler messages "Initializer element not constant" with
112 stdin/stdout/stderr. Why?
1133.10. I can't compile with gcc -traditional (or
114 -traditional-cpp). Why?
1153.11. I get some errors with `gcc -ansi'. Isn't glibc ANSI compatible?
a35cb74d
UD
1163.12. I can't access some functions anymore. nm shows that they do
117 exist but linking fails nevertheless.
a5f4e34a
UD
1183.13. When using the db-2 library which comes with glibc is used in
119 the Perl db modules the testsuite is not passed. This did not
120 happen with db-1, gdbm, or ndbm.
5148d49f
UD
1213.14. The pow() inline function I get when including <math.h> is broken.
122 I get segmentation faults when I run the program.
61952351
UD
123
1244. Miscellaneous
125
1264.1. After I changed configure.in I get `Autoconf version X.Y.
127 or higher is required for this script'. What can I do?
1284.2. When I try to compile code which uses IPv6 headers and
129 definitions on my Linux 2.x.y system I am in trouble.
130 Nothing seems to work.
aa802e96 1314.3. When I set the timezone by setting the TZ environment variable
ff44f2a5
UD
132 to EST5EDT things go wrong since glibc computes the wrong time
133 from this information.
fdacb17d 1344.4. What other sources of documentation about glibc are available?
f8cac037 135
61952351
UD
136\f
137~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
f4017d20 138
61952351 1391. Compiling glibc
04be94a8 140
61952351 1411.1. What systems does the GNU C Library run on?
613a76ff 142
f12944ec
UD
143{UD} This is difficult to answer. The file `README' lists the architectures
144GNU libc was known to run on *at some time*. This does not mean that it
145still can be compiled and run on them now.
f8cac037 146
f12944ec
UD
147The systems glibc is known to work on as of this release, and most probably
148in the future, are:
f8cac037
RM
149
150 *-*-gnu GNU Hurd
4775243a
UD
151 i[3456]86-*-linux-gnu Linux-2.x on Intel
152 m68k-*-linux-gnu Linux-2.x on Motorola 680x0
153 alpha-*-linux-gnu Linux-2.x on DEC Alpha
9a0a462c 154 powerpc-*-linux-gnu Linux and MkLinux on PowerPC systems
4775243a
UD
155 sparc-*-linux-gnu Linux-2.x on SPARC
156 sparc64-*-linux-gnu Linux-2.x on UltraSPARC
ff44f2a5
UD
157 arm-*-none ARM standalone systems
158 arm-*-linuxaout Linux-2.x on ARM using a.out binaries
f8cac037 159
f12944ec
UD
160Ports to other Linux platforms are in development, and may in fact work
161already, but no one has sent us success reports for them. Currently no
162ports to other operating systems are underway, although a few people have
163expressed interest.
f8cac037 164
f12944ec
UD
165If you have a system not listed above (or in the `README' file) and you are
166really interested in porting it, contact
f8cac037 167
4775243a 168 <bug-glibc@gnu.org>
f8cac037
RM
169
170
61952351 1711.2. What compiler do I need to build GNU libc?
f8cac037 172
f12944ec
UD
173{UD} You must use GNU CC to compile GNU libc. A lot of extensions of GNU CC
174are used to increase portability and speed.
f8cac037 175
61952351 176GNU CC is found, like all other GNU packages, on
f12944ec 177
a35cb74d 178 ftp://ftp.gnu.org/pub/gnu
f12944ec 179
a35cb74d 180and the many mirror sites. ftp.gnu.org is always overloaded, so try to find
61952351 181a local mirror first.
f8cac037 182
b0610668 183You should always try to use the latest official release. Older versions
f12944ec
UD
184may not have all the features GNU libc requires. The current releases of
185egcs (1.0.2) and GNU CC (2.8.1) should work with the GNU C library (for
186powerpc see question question 1.5).
f8cac037
RM
187
188
61952351
UD
1891.3. When I try to compile glibc I get only error messages.
190 What's wrong?
f8cac037 191
f12944ec
UD
192{UD} You definitely need GNU make to translate GNU libc. No other make
193program has the needed functionality.
f8cac037 194
f12944ec
UD
195We recommend version GNU make version 3.75. Versions 3.76 and 3.76.1 have
196bugs which appear when building big projects like GNU libc. Versions before
1973.74 have bugs and/or are missing features.
cbdee279 198
f8cac037 199
61952351 2001.4. Do I need a special linker or archiver?
f8cac037 201
f12944ec
UD
202{UD} You may be able to use your system linker, but GNU libc works best with
203GNU binutils.
f8cac037 204
f12944ec
UD
205On systems where the native linker does not support weak symbols you will
206not get a fully ISO C compliant C library. Generally speaking you should
207use the GNU binutils if they provide at least the same functionality as your
208system's tools.
f8cac037 209
f12944ec
UD
210Always get the newest release of GNU binutils available. Older releases are
211known to have bugs that prevent a successful compilation.
41f27456 212
f12944ec
UD
213{ZW} As of release 2.1 a linker supporting symbol versions is required. For
214Linux, get binutils-2.8.1.0.23 or later. Other systems may have native
215linker support, but it's moot right now, because glibc has not been ported
216to them.
f8cac037 217
f8cac037 218
8619129f 2191.5. Which compiler should I use for powerpc?
4775243a 220
f12944ec
UD
221{GK} You want to use egcs 1.0.1 or later (together with the right versions
222of all the other tools, of course).
4775243a 223
f12944ec
UD
224In fact, egcs 1.0.1 has a serious bug that prevents a clean make, relating
225to switch statement folding. It also causes the resulting shared libraries
226to use more memory than they should. There is a patch at:
4775243a 227
8619129f 228<http://discus.anu.edu.au/~geoffk/egcs-1.0.1-geoffk.diff>
4775243a 229
8619129f 230Later versions of egcs may fix these problems.
4775243a
UD
231
232
2331.6. Do I need some more things to compile GNU C Library?
f8cac037 234
61952351 235{UD} Yes, there are some more :-).
78b5ba3e 236
61952351
UD
237* GNU gettext. This package contains the tools needed to construct
238 `message catalog' files containing translated versions of system
a35cb74d 239 messages. See ftp://ftp.gnu.org/pub/gnu or better any mirror
61952351
UD
240 site. (We distribute compiled message catalogs, but they may not be
241 updated in patches.)
f8cac037 242
61952351
UD
243* Some files depend on special tools. E.g., files ending in .gperf
244 need a `gperf' program. The GNU version (part of libg++) is known
245 to work while some vendor versions do not.
f8cac037 246
61952351 247 You should not need these tools unless you change the source files.
1f205a47 248
4775243a
UD
249* Some scripts need perl5 - but at the moment those scripts are not
250 vital for building and installing GNU libc (some data files will not
251 be created).
252
61952351
UD
253* When compiling for Linux, the header files of the Linux kernel must
254 be available to the compiler as <linux/*.h> and <asm/*.h>.
f8cac037 255
8619129f
UD
256* lots of disk space (~170MB for i?86-linux; more for RISC platforms,
257 as much as 400MB).
af6f3906 258
61952351
UD
259* plenty of time. Compiling just the shared and static libraries for
260 i?86-linux takes approximately 1h on an i586@133, or 2.5h on
261 i486@66, or 4.5h on i486@33. Multiply this by 1.5 or 2.0 if you
262 build profiling and/or the highly optimized version as well. For
263 Hurd systems times are much higher.
f8cac037 264
61952351
UD
265 You should avoid compiling in a NFS mounted filesystem. This is
266 very slow.
0200214b 267
61952351 268 James Troup <J.J.Troup@comp.brad.ac.uk> reports a compile time of
4775243a
UD
269 45h34m for a full build (shared, static, and profiled) on Atari
270 Falcon (Motorola 68030 @ 16 Mhz, 14 Mb memory) and Jan Barte
271 <yann@plato.uni-paderborn.de> reports 22h48m on Atari TT030
272 (Motorola 68030 @ 32 Mhz, 34 Mb memory)
0200214b 273
61952351 274 If you have some more measurements let me know.
0200214b 275
ba1ffaa1 276
a35cb74d
UD
2771.7. What version of the Linux kernel headers should be used?
278
f12944ec
UD
279{AJ,UD} The headers from the most recent Linux kernel should be used. The
280headers used while compiling the GNU C library and the kernel binary used
281when using the library do not need to match. The GNU C library runs without
282problems on kernels that are older than the kernel headers used. The other
283way round (compiling the GNU C library with old kernel headers and running
284on a recent kernel) does not necessarily work. For example you can't use
285new kernel features when using old kernel headers for compiling the GNU C
286library.
287
b0610668
UD
288{ZW} Even if you are using a 2.0 kernel on your machine, we recommend you
289compile GNU libc with 2.1 kernel headers. That way you won't have to
290recompile libc if you ever upgrade to kernel 2.1 or 2.2. To tell libc which
291headers to use, give configure the --with-headers switch
292(e.g. --with-headers=/usr/src/linux-2.1.107/include).
293
294Note that you must configure the 2.1 kernel if you do this; otherwise libc
295will be unable to find <linux/version.h>. Just copy .config from your 2.0
296kernel sources to the 2.1 tree, do `make oldconfig', and say no to all the
297new options.
298
f12944ec
UD
299
3001.8. The compiler hangs while building iconvdata modules. What's
301 wrong?
302
303{ZW} This is a problem with all current releases of GCC. Initialization of
304large static arrays is very slow. The compiler will eventually finish; give
305it time.
a35cb74d 306
f12944ec 307The problem will be fixed in egcs 1.1 but probably not before then.
a35cb74d 308
f12944ec
UD
309
3101.9. When I run `nm -u libc.so' on the produced library I still
61952351 311 find unresolved symbols. Can this be ok?
f8cac037 312
f12944ec 313{UD} Yes, this is ok. There can be several kinds of unresolved symbols:
f8cac037 314
61952351
UD
315* magic symbols automatically generated by the linker. These have names
316 like __start_* and __stop_*
f8cac037 317
78b5ba3e
RM
318* symbols starting with _dl_* come from the dynamic linker
319
61952351 320* weak symbols, which need not be resolved at all (fabs for example)
f8cac037
RM
321
322Generally, you should make sure you find a real program which produces
41f27456 323errors while linking before deciding there is a problem.
f8cac037
RM
324
325
f12944ec 3261.10. What are these `add-ons'?
999493cb 327
f12944ec
UD
328{UD} To avoid complications with export rules or external source code some
329optional parts of the libc are distributed as separate packages (e.g., the
330crypt package, see question 2.5).
999493cb 331
f12944ec
UD
332To use these packages as part of GNU libc, just unpack the tarfiles in the
333libc source directory and tell the configuration script about them using the
334--enable-add-ons option. If you give just --enable-add-ons configure tries
335to find all the add-on packages in your source tree. This may not work. If
336it doesn't, or if you want to select only a subset of the add-ons, give a
337comma-separated list of the add-ons to enable:
613a76ff 338
61952351 339 configure --enable-add-ons=crypt,linuxthreads
41f27456 340
61952351 341for example.
0200214b 342
f12944ec
UD
343Add-ons can add features (including entirely new shared libraries), override
344files, provide support for additional architectures, and just about anything
345else. The existing makefiles do most of the work; only some few stub rules
346must be written to get everything running.
613a76ff 347
613a76ff 348
f12944ec 3491.11. My XXX kernel emulates a floating-point coprocessor for me.
61952351 350 Should I enable --with-fp?
613a76ff 351
f12944ec
UD
352{ZW} An emulated FPU is just as good as a real one, as far as the C library
353is concerned. You only need to say --without-fp if your machine has no way
354to execute floating-point instructions.
f8cac037 355
61952351
UD
356People who are interested in squeezing the last drop of performance
357out of their machine may wish to avoid the trap overhead, but this is
358far more trouble than it's worth: you then have to compile
359*everything* this way, including the compiler's internal libraries
360(libgcc.a for GNU C), because the calling conventions change.
a1470b6f 361
999493cb 362
f12944ec 3631.12. When compiling GNU libc I get lots of errors saying functions
61952351 364 in glibc are duplicated in libgcc.
5290baf0 365
f12944ec
UD
366{EY} This is *exactly* the same problem that I was having. The problem was
367due to the fact that configure didn't correctly detect that the linker flag
368--no-whole-archive was supported in my linker. In my case it was because I
369had run ./configure with bogus CFLAGS, and the test failed.
78b5ba3e 370
f12944ec
UD
371One thing that is particularly annoying about this problem is that once this
372is misdetected, running configure again won't fix it unless you first delete
373config.cache.
78b5ba3e 374
f12944ec
UD
375{UD} Starting with glibc-2.0.3 there should be a better test to avoid some
376problems of this kind. The setting of CFLAGS is checked at the very
377beginning and if it is not usable `configure' will bark.
78b5ba3e 378
af6f3906 379
f12944ec 3801.13. Why do I get messages about missing thread functions when I use
a35cb74d 381 librt? I don't even use threads.
4775243a 382
a35cb74d
UD
383{UD} In this case you probably mixed up your installation. librt uses
384threads internally and has implicit references to the thread library.
f12944ec
UD
385Normally these references are satisfied automatically but if the thread
386library is not in the expected place you must tell the linker where it is.
387When using GNU ld it works like this:
4775243a
UD
388
389 gcc -o foo foo.c -Wl,-rpath-link=/some/other/dir -lrt
390
f12944ec
UD
391The `/some/other/dir' should contain the thread library. `ld' will use the
392given path to find the implicitly referenced library while not disturbing
393any other link path.
4775243a
UD
394
395
f12944ec 3961.14. What's the problem with configure --enable-omitfp?
78b5ba3e 397
61952351 398{AJ} When --enable-omitfp is set the libraries are built without frame
fdacb17d 399pointers. Some compilers produce buggy code for this model and therefore we
f12944ec 400don't advise using it at the moment.
66219c07 401
fdacb17d 402If you use --enable-omitfp, you're on your own. If you encounter problems
f12944ec
UD
403with a library that was build this way, we advise you to rebuild the library
404without --enable-omitfp. If the problem vanishes consider tracking the
405problem down and report it as compiler failure.
66219c07 406
f12944ec
UD
407Since a library build with --enable-omitfp is undebuggable on most systems,
408debuggable libraries are also built - you can use it by appending "_g" to
409the library names.
66219c07 410
f12944ec
UD
411The compilation of these extra libraries and the compiler optimizations slow
412down the build process and need more disk space.
66219c07 413
b0610668
UD
414
4151.15. I get failures during `make check'. What shall I do?
416
417{AJ} The testsuite should compile and run cleanly on your system, every
418failure should be looked into. Depending on the failure I wouldn't advise
419installing the library at all.
420
421You should consider using the `glibcbug' script to report the failure,
422providing as much detail as possible. If you run a test directly, please
423remember to set up the environment correctly. You want to test the compiled
424library - and not your installed one. The best way is to copy the exact
425command line which failed and run the test from the subdirectory for this
426test in the sources.
427
428There are some failures which are not directly related to the GNU libc:
429- Some compiler produce buggy code. The current egcs snapshots are ok and
430 the not yet released egcs 1.1 should be ok. gcc 2.8.1 might cause some
431 failures, gcc 2.7.2.x is so buggy, that explicit checks have been used so
432 that you can't build with it.
433- The kernel might have bugs. For example on Linux/Alpha 2.0.34 the
434 floating point handling has quite a number of bugs and therefore most of
435 the test cases in the math subdirectory will fail. The current Linux 2.1
436 development kernels have fixes for the floating point support on Alpha.
437
61952351
UD
438\f
439. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
e6c9a67a 440
61952351 4412. Installation and configuration issues
e6c9a67a 442
61952351 4432.1. Can I replace the libc on my Linux system with GNU libc?
e6c9a67a 444
f12944ec
UD
445{UD} You cannot replace any existing libc for Linux with GNU libc. It is
446binary incompatible and therefore has a different major version. You can,
447however, install it alongside your existing libc.
e6c9a67a 448
61952351
UD
449For Linux there are three major libc versions:
450 libc-4 a.out libc
451 libc-5 original ELF libc
452 libc-6 GNU libc
e6c9a67a 453
f12944ec
UD
454You can have any combination of these three installed. For more information
455consult documentation for shared library handling. The Makefiles of GNU
456libc will automatically generate the needed symbolic links which the linker
457will use.
e6c9a67a
RM
458
459
61952351
UD
4602.2. How do I configure GNU libc so that the essential libraries
461 like libc.so go into /lib and the other into /usr/lib?
ec42724d 462
61952351
UD
463{UD,AJ} Like all other GNU packages GNU libc is designed to use a base
464directory and install all files relative to this. The default is
f12944ec
UD
465/usr/local, because this is safe (it will not damage the system if installed
466there). If you wish to install GNU libc as the primary C library on your
467system, set the base directory to /usr (i.e. run configure --prefix=/usr
468<other_options>). Note that this can damage your system; see question 2.3 for
469details.
470
471Some systems like Linux have a filesystem standard which makes a difference
472between essential libraries and others. Essential libraries are placed in
473/lib because this directory is required to be located on the same disk
474partition as /. The /usr subtree might be found on another
475partition/disk. If you configure for Linux with --prefix=/usr, then this
476will be done automatically.
ec42724d 477
61952351 478To install the essential libraries which come with GNU libc in /lib on
f12944ec
UD
479systems other than Linux one must explicitly request it. Autoconf has no
480option for this so you have to use a `configparms' file (see the `INSTALL'
481file for details). It should contain:
ec42724d
RM
482
483slibdir=/lib
484sysconfdir=/etc
485
f12944ec
UD
486The first line specifies the directory for the essential libraries, the
487second line the directory for system configuration files.
ec42724d 488
5290baf0 489
61952351 4902.3. How should I avoid damaging my system when I install GNU libc?
ec42724d 491
f12944ec
UD
492{ZW} If you wish to be cautious, do not configure with --prefix=/usr. If
493you don't specify a prefix, glibc will be installed in /usr/local, where it
494will probably not break anything. (If you wish to be certain, set the
495prefix to something like /usr/local/glibc2 which is not used for anything.)
845dcb57 496
61952351 497The dangers when installing glibc in /usr are twofold:
845dcb57 498
61952351
UD
499* glibc will overwrite the headers in /usr/include. Other C libraries
500 install a different but overlapping set of headers there, so the
501 effect will probably be that you can't compile anything. You need to
502 rename /usr/include out of the way first. (Do not throw it away; you
503 will then lose the ability to compile programs against your old libc.)
845dcb57 504
61952351
UD
505* None of your old libraries, static or shared, can be used with a
506 different C library major version. For shared libraries this is not a
507 problem, because the filenames are different and the dynamic linker
508 will enforce the restriction. But static libraries have no version
509 information. You have to evacuate all the static libraries in
510 /usr/lib to a safe location.
845dcb57 511
61952351
UD
512The situation is rather similar to the move from a.out to ELF which
513long-time Linux users will remember.
845dcb57 514
845dcb57 515
61952351
UD
5162.4. Do I need to use GNU CC to compile programs that will use the
517 GNU C Library?
845dcb57 518
f12944ec
UD
519{ZW} In theory, no; the linker does not care, and the headers are supposed
520to check for GNU CC before using its extensions to the C language.
845dcb57 521
f12944ec
UD
522However, there are currently no ports of glibc to systems where another
523compiler is the default, so no one has tested the headers extensively
524against another compiler. You may therefore encounter difficulties. If you
525do, please report them as bugs.
845dcb57 526
61952351
UD
527Also, in several places GNU extensions provide large benefits in code
528quality. For example, the library has hand-optimized, inline assembly
f12944ec
UD
529versions of some string functions. These can only be used with GCC. See
530question 3.8 for details.
845dcb57 531
845dcb57 532
61952351
UD
5332.5. When linking with the new libc I get unresolved symbols
534 `crypt' and `setkey'. Why aren't these functions in the
535 libc anymore?
845dcb57 536
f12944ec
UD
537{UD} The US places restrictions on exporting cryptographic programs and
538source code. Until this law gets abolished we cannot ship the cryptographic
539functions together with glibc.
845dcb57 540
f12944ec
UD
541The functions are available, as an add-on (see question 1.10). People in the US
542may get it from the same place they got GNU libc from. People outside the
543US should get the code from ftp://ftp.ifi.uio.no/pub/gnu, or another archive
544site outside the USA. The README explains how to install the sources.
c4029823 545
f12944ec
UD
546If you already have the crypt code on your system the reason for the failure
547is probably that you did not link with -lcrypt. The crypto functions are in
548a separate library to make it possible to export GNU libc binaries from the
549US.
c4029823 550
c4029823 551
61952351
UD
5522.6. When I use GNU libc on my Linux system by linking against
553 the libc.so which comes with glibc all I get is a core dump.
c4029823 554
f12944ec
UD
555{UD} On Linux, gcc sets the dynamic linker to /lib/ld-linux.so.1 unless the
556user specifies a -dynamic-linker argument. This is the name of the libc5
557dynamic linker, which does not work with glibc.
61952351
UD
558
559For casual use of GNU libc you can just specify
560 -dynamic-linker=/lib/ld-linux.so.2
561
f12944ec
UD
562which is the glibc dynamic linker, on Linux systems. On other systems the
563name is /lib/ld.so.1.
c4029823 564
f12944ec
UD
565To change your environment to use GNU libc for compiling you need to change
566the `specs' file of your gcc. This file is normally found at
c4029823
UD
567
568 /usr/lib/gcc-lib/<arch>/<version>/specs
569
570In this file you have to change a few things:
571
61952351 572- change `ld-linux.so.1' to `ld-linux.so.2'
c4029823
UD
573
574- remove all expression `%{...:-lgmon}'; there is no libgmon in glibc
575
f4017d20
UD
576- fix a minor bug by changing %{pipe:-} to %|
577
f12944ec
UD
578Here is what the gcc-2.7.2 specs file should look like when GNU libc is
579installed at /usr:
c4029823
UD
580
581-----------------------------------------------------------------------
582*asm:
583%{V} %{v:%{!V:-V}} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*}
584
585*asm_final:
f4017d20 586%|
c4029823
UD
587
588*cpp:
68dbb3a6 589%{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} %{!m386:-D__i486__} %{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}
c4029823
UD
590
591*cc1:
68dbb3a6 592%{profile:-p}
c4029823
UD
593
594*cc1plus:
595
596
597*endfile:
68dbb3a6 598%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s
c4029823
UD
599
600*link:
68dbb3a6 601-m elf_i386 %{shared:-shared} %{!shared: %{!ibcs: %{!static: %{rdynamic:-export-dynamic} %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} %{static:-static}}}
c4029823
UD
602
603*lib:
68dbb3a6 604%{!shared: %{pthread:-lpthread} %{profile:-lc_p} %{!profile: -lc}}
c4029823
UD
605
606*libgcc:
68dbb3a6 607-lgcc
c4029823
UD
608
609*startfile:
61952351 610%{!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
611
612*switches_need_spaces:
613
614
615*signed_char:
616%{funsigned-char:-D__CHAR_UNSIGNED__}
617
618*predefines:
619-D__ELF__ -Dunix -Di386 -Dlinux -Asystem(unix) -Asystem(posix) -Acpu(i386) -Amachine(i386)
620
621*cross_compile:
6220
623
624*multilib:
625. ;
626
627-----------------------------------------------------------------------
628
f12944ec
UD
629Things get a bit more complicated if you have GNU libc installed in some
630other place than /usr, i.e., if you do not want to use it instead of the old
631libc. In this case the needed startup files and libraries are not found in
632the regular places. So the specs file must tell the compiler and linker
633exactly what to use.
0d204b0a 634
f41c8091 635Version 2.7.2.3 does and future versions of GCC will automatically
0d8733c4 636provide the correct specs.
c4029823
UD
637
638
61952351
UD
6392.7. Looking through the shared libc file I haven't found the
640 functions `stat', `lstat', `fstat', and `mknod' and while
641 linking on my Linux system I get error messages. How is
642 this supposed to work?
c4029823 643
f12944ec
UD
644{RM} Believe it or not, stat and lstat (and fstat, and mknod) are supposed
645to be undefined references in libc.so.6! Your problem is probably a missing
646or incorrect /usr/lib/libc.so file; note that this is a small text file now,
647not a symlink to libc.so.6. It should look something like this:
c4029823 648
ff44f2a5 649GROUP ( libc.so.6 libc_nonshared.a )
1f205a47 650
c4029823 651
61952351
UD
6522.8. How can I compile gcc 2.7.2.1 from the gcc source code using
653 glibc 2.x?
ba1ffaa1 654
f12944ec
UD
655{AJ} There's only correct support for glibc 2.0.x in gcc 2.7.2.3 or later.
656But you should get at least gcc 2.8.1 or egcs 1.0.2 (or later versions)
657instead.
ba1ffaa1
UD
658
659
61952351
UD
6602.9. The `gencat' utility cannot process the catalog sources which
661 were used on my Linux libc5 based system. Why?
47707456 662
f12944ec
UD
663{UD} The `gencat' utility provided with glibc complies to the XPG standard.
664The older Linux version did not obey the standard, so they are not
665compatible.
47707456 666
61952351 667To ease the transition from the Linux version some of the non-standard
f12944ec
UD
668features are also present in the `gencat' program of GNU libc. This mainly
669includes the use of symbols for the message number and the automatic
61952351
UD
670generation of header files which contain the needed #defines to map the
671symbols to integers.
47707456 672
f12944ec
UD
673Here is a simple SED script to convert at least some Linux specific catalog
674files to the XPG4 form:
68dbb3a6 675
61952351
UD
676-----------------------------------------------------------------------
677# Change catalog source in Linux specific format to standard XPG format.
678# Ulrich Drepper <drepper@cygnus.com>, 1996.
679#
680/^\$ #/ {
681 h
682 s/\$ #\([^ ]*\).*/\1/
683 x
684 s/\$ #[^ ]* *\(.*\)/\$ \1/
685}
68dbb3a6 686
61952351
UD
687/^# / {
688 s/^# \(.*\)/\1/
689 G
690 s/\(.*\)\n\(.*\)/\2 \1/
691}
692-----------------------------------------------------------------------
19361cb7 693
19361cb7 694
a35cb74d
UD
6952.10. Programs using libc have their messages translated, but other
696 behavior is not localized (e.g. collating order); why?
697
698{ZW} Translated messages are automatically installed, but the locale
f12944ec
UD
699database that controls other behaviors is not. You need to run localedef to
700install this database, after you have run `make install'. For example, to
701set up the French Canadian locale, simply issue the command
a35cb74d
UD
702
703 localedef -i fr_CA -f ISO-8859-1 fr_CA
704
705Please see localedata/README in the source tree for further details.
706
707
7082.11. I have set up /etc/nis.conf, and the Linux libc 5 with NYS
61952351 709 works great. But the glibc NIS+ doesn't seem to work.
19361cb7 710
f12944ec
UD
711{TK} The glibc NIS+ implementation uses a /var/nis/NIS_COLD_START file for
712storing information about the NIS+ server and their public keys, because the
713nis.conf file does not contain all the necessary information. You have to
714copy a NIS_COLD_START file from a Solaris client (the NIS_COLD_START file is
715byte order independent) or generate it with nisinit from the nis-tools
716package; available at
717
718 http://www-vt.uni-paderborn.de/~kukuk/linux/nisplus.html
19361cb7 719
68dbb3a6 720
a35cb74d 7212.12. I have killed ypbind to stop using NIS, but glibc
3dcf8ea6 722 continues using NIS.
4d06461a 723
f12944ec
UD
724{TK} For faster NIS lookups, glibc uses the /var/yp/binding/ files from
725ypbind. ypbind 3.3 and older versions don't always remove these files, so
726glibc will continue to use them. Other BSD versions seem to work correctly.
727Until ypbind 3.4 is released, you can find a patch at
728
bdbf022d 729 ftp://ftp.kernel.org/pub/linux/utils/net/NIS/ypbind-3.3-glibc3.diff.gz
a35cb74d 730
4d06461a 731
a35cb74d 7322.13. Under Linux/Alpha, I always get "do_ypcall: clnt_call:
3dcf8ea6 733 RPC: Unable to receive; errno = Connection refused" when using NIS.
4d06461a 734
f12944ec
UD
735{TK} You need a ypbind version which is 64bit clean. Some versions are not
73664bit clean. A 64bit clean implementation is ypbind-mt. For ypbind 3.3,
737you need the patch from ftp.kernel.org (See the previous question). I don't
738know about other versions.
a35cb74d
UD
739
740
7412.14. After installing glibc name resolving doesn't work properly.
68dbb3a6 742
f12944ec
UD
743{AJ} You probably should read the manual section describing nsswitch.conf
744(just type `info libc "NSS Configuration File"'). The NSS configuration
745file is usually the culprit.
22d57dd3 746
22d57dd3 747
3dcf8ea6
UD
7482.15. How do I create the databases for NSS?
749
750{AJ} If you have an entry "db" in /etc/nsswitch.conf you should also create
751the database files. The glibc sources contain a Makefile which does the
752neccessary conversion and calls to create those files. The file is
753`db-Makefile' in the subdirectory `nss' and you can call it with `make -f
754db-Makefile'. Please note that not all services are capable of using a
755database. Currently passwd, group, ethers, protocol, rpc, services shadow
756and netgroup are implemented.
757
758
7592.16. I have /usr/include/net and /usr/include/scsi as symlinks
61952351 760 into my Linux source tree. Is that wrong?
22d57dd3 761
f12944ec
UD
762{PB} This was necessary for libc5, but is not correct when using glibc.
763Including the kernel header files directly in user programs usually does not
764work (see question 3.5). glibc provides its own <net/*> and <scsi/*> header
765files to replace them, and you may have to remove any symlink that you have
766in place before you install glibc. However, /usr/include/asm and
767/usr/include/linux should remain as they were.
22d57dd3 768
22d57dd3 769
3dcf8ea6 7702.17. Programs like `logname', `top', `uptime' `users', `w' and
61952351
UD
771 `who', show incorrect information about the (number of)
772 users on my system. Why?
22d57dd3 773
61952351 774{MK} See question 3.2.
22d57dd3 775
22d57dd3 776
3dcf8ea6 7772.18. After upgrading to glibc 2.1 with symbol versioning I get
61952351 778 errors about undefined symbols. What went wrong?
26dee9c4 779
f12944ec
UD
780{AJ} The problem is caused either by wrong program code or tools. In the
781versioned libc a lot of symbols are now local that were global symbols in
782previous versions. It seems that programs linked against older versions
783often accidentally used libc global variables -- something that should not
784happen.
26dee9c4 785
f12944ec
UD
786The only way to fix this is to recompile your program. Sorry, that's the
787price you might have to pay once for quite a number of advantages with
788symbol versioning.
26dee9c4 789
26dee9c4 790
3dcf8ea6 7912.19. When I start the program XXX after upgrading the library
61952351
UD
792 I get
793 XXX: Symbol `_sys_errlist' has different size in shared
794 object, consider re-linking
795 Why? What should I do?
26dee9c4 796
f12944ec
UD
797{UD} As the message says, relink the binary. The problem is that a few
798symbols from the library can change in size and there is no way to avoid
799this. _sys_errlist is a good example. Occasionally there are new error
800numbers added to the kernel and this must be reflected at user level,
801breaking programs that refer to them directly.
a2b08ee5 802
f12944ec
UD
803Such symbols should normally not be used at all. There are mechanisms to
804avoid using them. In the case of _sys_errlist, there is the strerror()
805function which should _always_ be used instead. So the correct fix is to
806rewrite that part of the application.
a2b08ee5 807
f12944ec
UD
808In some situations (especially when testing a new library release) it might
809be possible that a symbol changed size when that should not have happened.
810So in case of doubt report such a warning message as a problem.
a2b08ee5 811
a35cb74d 812
3dcf8ea6 8132.20. What do I need for C++ development?
a35cb74d 814
f12944ec
UD
815{HJ,AJ} You need either egcs 1.0.2 or gcc-2.8.1 with libstdc++ 2.8.1 (or
816more recent versions). libg++ 2.7.2 (and the Linux Versions 2.7.2.x) doesn't
817work very well with the GNU C library due to vtable thunks. If you're
818upgrading from glibc 2.0.x to 2.1 you have to recompile libstdc++ since the
819library compiled for 2.0 is not compatible due to the new Large File Support
820(LFS) in version 2.1.
a35cb74d 821
ff44f2a5 822
3dcf8ea6 8232.21. Even statically linked programs need some shared libraries
ff44f2a5
UD
824 which is not acceptable for me. What can I do?
825
f12944ec
UD
826{AJ} NSS (for details just type `info libc "Name Service Switch"') won't
827work properly without shared libraries. NSS allows using different services
828(e.g. NIS, files, db, hesiod) by just changing one configuration file
829(/etc/nsswitch.conf) without relinking any programs. The only disadvantage
830is that now static libraries need to access shared libraries. This is
831handled transparently by the GNU C library.
ff44f2a5 832
f12944ec
UD
833A solution is to configure glibc with --enable-static-nss. In this case you
834can create a static binary that will use only the services dns and files
835(change /etc/nsswitch.conf for this). You need to link explicitly against
836all these services. For example:
ff44f2a5
UD
837
838 gcc -static test-netdb.c -o test-netdb.c \
839 -lc -lnss_files -lnss_dns -lresolv
840
841The problem with this approach is that you've got to link every static
842program that uses NSS routines with all those libraries.
843
844{UD} In fact, one cannot say anymore that a libc compiled with this
845option is using NSS. There is no switch anymore. Therefore it is
846*highly* recommended *not* to use --enable-static-nss since this makes
847the behaviour of the programs on the system inconsistent.
848
fdacb17d
UD
849
8502.22. I just upgraded my Linux system to glibc and now I get
851 errors whenever I try to link any program.
852
853{ZW} This happens when you have installed glibc as the primary C library but
854have stray symbolic links pointing at your old C library. If the first
855`libc.so' the linker finds is libc 5, it will use that. Your program
856expects to be linked with glibc, so the link fails.
857
858The most common case is that glibc put its `libc.so' in /usr/lib, but there
859was a `libc.so' from libc 5 in /lib, which gets searched first. To fix the
860problem, just delete /lib/libc.so. You may also need to delete other
861symbolic links in /lib, such as /lib/libm.so if it points to libm.so.5.
862
863{AJ} The perl script test-installation.pl which is run as last step during
864an installation of glibc that is configured with --prefix=/usr should help
865detect these situations. If the script reports problems, something is
866really screwed up.
867
61952351
UD
868\f
869. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
a5a0310d 870
61952351 8713. Source and binary incompatibilities, and what to do about them
a5a0310d 872
61952351
UD
8733.1. I expect GNU libc to be 100% source code compatible with
874 the old Linux based GNU libc. Why isn't it like this?
a5a0310d 875
f12944ec
UD
876{DMT,UD} Not every extension in Linux libc's history was well thought-out.
877In fact it had a lot of problems with standards compliance and with
878cleanliness. With the introduction of a new version number these errors can
879now be corrected. Here is a list of the known source code
61952351 880incompatibilities:
af6f3906 881
61952351
UD
882* _GNU_SOURCE: glibc does not make the GNU extensions available
883 automatically. If a program depends on GNU extensions or some
884 other non-standard functionality, it is necessary to compile it
885 with the C compiler option -D_GNU_SOURCE, or better, to put
886 `#define _GNU_SOURCE' at the beginning of your source files, before
887 any C library header files are included. This difference normally
888 manifests itself in the form of missing prototypes and/or data type
889 definitions. Thus, if you get such errors, the first thing you
890 should do is try defining _GNU_SOURCE and see if that makes the
891 problem go away.
af6f3906 892
61952351
UD
893 For more information consult the file `NOTES' in the GNU C library
894 sources.
af6f3906 895
61952351
UD
896* reboot(): GNU libc sanitizes the interface of reboot() to be more
897 compatible with the interface used on other OSes. reboot() as
898 implemented in glibc takes just one argument. This argument
899 corresponds to the third argument of the Linux reboot system call.
900 That is, a call of the form reboot(a, b, c) needs to be changed into
901 reboot(c). Beside this the header <sys/reboot.h> defines the needed
902 constants for the argument. These RB_* constants should be used
903 instead of the cryptic magic numbers.
904
905* swapon(): the interface of this function didn't change, but the
906 prototype is in a separate header file <sys/swap.h>. This header
907 file also provides the SWAP_* constants defined by <linux/swap.h>;
908 you should use them for the second argument to swapon().
909
910* errno: If a program uses the variable "errno", then it _must_
911 include <errno.h>. The old libc often (erroneously) declared this
912 variable implicitly as a side-effect of including other libc header
913 files. glibc is careful to avoid such namespace pollution, which,
914 in turn, means that you really need to include the header files that
915 you depend on. This difference normally manifests itself in the
916 form of the compiler complaining about references to an undeclared
917 symbol "errno".
dd7d45e8 918
61952351
UD
919* Linux-specific syscalls: All Linux system calls now have appropriate
920 library wrappers and corresponding declarations in various header files.
921 This is because the syscall() macro that was traditionally used to
922 work around missing syscall wrappers are inherently non-portable and
923 error-prone. The following table lists all the new syscall stubs,
924 the header-file declaring their interface and the system call name.
dd7d45e8 925
61952351
UD
926 syscall name: wrapper name: declaring header file:
927 ------------- ------------- ----------------------
928 bdflush bdflush <sys/kdaemon.h>
929 syslog ksyslog_ctl <sys/klog.h>
dd7d45e8 930
61952351
UD
931* lpd: Older versions of lpd depend on a routine called _validuser().
932 The library does not provide this function, but instead provides
933 __ivaliduser() which has a slightly different interface. Simply
934 upgrading to a newer lpd should fix this problem (e.g., the 4.4BSD
935 lpd is known to be working).
dd7d45e8 936
61952351
UD
937* resolver functions/BIND: like on many other systems the functions of
938 the resolver library are not included in libc itself. There is a
939 separate library libresolv. If you get undefined symbol errors for
940 symbols starting with `res_*' simply add -lresolv to your linker
941 command line.
dd7d45e8 942
61952351
UD
943* the `signal' function's behavior corresponds to the BSD semantic and
944 not the SysV semantic as it was in libc-5. The interface on all GNU
945 systems shall be the same and BSD is the semantic of choice. To use
946 the SysV behavior simply use `sysv_signal', or define _XOPEN_SOURCE.
947 See question 3.7 for details.
1cab5444 948
1cab5444 949
61952351
UD
9503.2. Why does getlogin() always return NULL on my Linux box?
951
f12944ec
UD
952{UD} The GNU C library has a format for the UTMP and WTMP file which differs
953from what your system currently has. It was extended to fulfill the needs
954of the next years when IPv6 is introduced. The record size is different and
955some fields have different positions. The files written by functions from
956the one library cannot be read by functions from the other library. Sorry,
957but this is what a major release is for. It's better to have a cut now than
958having no means to support the new techniques later.
1cab5444 959
f12944ec
UD
960{MK} There is however a (partial) solution for this problem. Please take a
961look at the file `login/README.utmpd'.
1cab5444 962
6973fc01 963
61952351
UD
9643.3. Where are the DST_* constants found in <sys/time.h> on many
965 systems?
6973fc01 966
f12944ec
UD
967{UD} These constants come from the old BSD days and are not used anymore
968(libc5 does not actually implement the handling although the constants are
969defined).
6973fc01 970
f12944ec
UD
971Instead GNU libc contains zone database support and compatibility code for
972POSIX TZ environment variable handling.
6973fc01
UD
973
974
61952351
UD
9753.4. The prototypes for `connect', `accept', `getsockopt',
976 `setsockopt', `getsockname', `getpeername', `send',
977 `sendto', and `recvfrom' are different in GNU libc from
978 any other system I saw. This is a bug, isn't it?
f4017d20 979
f12944ec
UD
980{UD} No, this is no bug. This version of GNU libc already follows the new
981Single Unix specifications (and I think the POSIX.1g draft which adopted the
982solution). The type for a parameter describing a size is now `socklen_t', a
983new type.
f4017d20 984
f4017d20 985
61952351
UD
9863.5. On Linux I've got problems with the declarations in Linux
987 kernel headers.
f4017d20 988
f12944ec
UD
989{UD,AJ} On Linux, the use of kernel headers is reduced to the minimum. This
990gives Linus the ability to change the headers more freely. Also, user
8f1c9b09 991programs are now insulated from changes in the size of kernel data
f12944ec 992structures.
f4017d20 993
f12944ec
UD
994For example, the sigset_t type is 32 or 64 bits wide in the kernel. In
995glibc it is 1024 bits wide. This guarantees that when the kernel gets a
996bigger sigset_t (for POSIX.1e realtime support, say) user programs will not
997have to be recompiled. Consult the header files for more information about
998the changes.
61952351 999
f12944ec
UD
1000Therefore you shouldn't include Linux kernel header files directly if glibc
1001has defined a replacement. Otherwise you might get undefined results because
1002of type conflicts.
f4017d20 1003
f4017d20 1004
61952351
UD
10053.6. I don't include any kernel headers myself but the compiler
1006 still complains about redeclarations of types in the kernel
1007 headers.
1008
f12944ec
UD
1009{UD} The kernel headers before Linux 2.1.61 and 2.0.32 don't work correctly
1010with glibc. Compiling C programs is possible in most cases but C++ programs
1011have (due to the change of the name lookups for `struct's) problems. One
1012prominent example is `struct fd_set'.
61952351 1013
f12944ec
UD
1014There might be some problems left but 2.1.61/2.0.32 fix most of the known
1015ones. See the BUGS file for other known problems.
61952351
UD
1016
1017
10183.7. Why don't signals interrupt system calls anymore?
1019
f12944ec
UD
1020{ZW} By default GNU libc uses the BSD semantics for signal(), unlike Linux
1021libc 5 which used System V semantics. This is partially for compatibility
1022with other systems and partially because the BSD semantics tend to make
1023programming with signals easier.
f4017d20
UD
1024
1025There are three differences:
1026
1027* BSD-style signals that occur in the middle of a system call do not
1028 affect the system call; System V signals cause the system call to
1029 fail and set errno to EINTR.
1030
1031* BSD signal handlers remain installed once triggered. System V signal
1032 handlers work only once, so one must reinstall them each time.
1033
1034* A BSD signal is blocked during the execution of its handler. In other
1035 words, a handler for SIGCHLD (for example) does not need to worry about
61952351 1036 being interrupted by another SIGCHLD. It may, however, be interrupted
f4017d20
UD
1037 by other signals.
1038
1039There is general consensus that for `casual' programming with signals, the
1040BSD semantics are preferable. You don't need to worry about system calls
1041returning EINTR, and you don't need to worry about the race conditions
1042associated with one-shot signal handlers.
1043
1044If you are porting an old program that relies on the old semantics, you can
1045quickly fix the problem by changing signal() to sysv_signal() throughout.
1046Alternatively, define _XOPEN_SOURCE before including <signal.h>.
1047
1048For new programs, the sigaction() function allows you to specify precisely
1049how you want your signals to behave. All three differences listed above are
1050individually switchable on a per-signal basis with this function.
1051
f12944ec
UD
1052If all you want is for one specific signal to cause system calls to fail and
1053return EINTR (for example, to implement a timeout) you can do this with
f4017d20
UD
1054siginterrupt().
1055
1056
61952351
UD
10573.8. I've got errors compiling code that uses certain string
1058 functions. Why?
1059
f12944ec 1060{AJ} glibc 2.1 has special string functions that are faster than the normal
fdacb17d 1061library functions. Some of the functions are additionally implemented as
3dcf8ea6 1062inline functions and others as macros.
04be94a8 1063
04be94a8 1064The optimized string functions are only used when compiling with
fdacb17d 1065optimizations (-O1 or higher). The behavior can be changed with two feature
f12944ec 1066macros:
61952351
UD
1067
1068* __NO_STRING_INLINES: Don't do any string optimizations.
1069* __USE_STRING_INLINES: Use assembly language inline functions (might
1070 increase code size dramatically).
04be94a8 1071
f12944ec
UD
1072Since some of these string functions are now additionally defined as macros,
1073code like "char *strncpy();" doesn't work anymore (and is unnecessary, since
fdacb17d 1074<string.h> has the necessary declarations). Either change your code or
f12944ec 1075define __NO_STRING_INLINES.
04be94a8 1076
f12944ec
UD
1077{UD} Another problem in this area is that gcc still has problems on machines
1078with very few registers (e.g., ix86). The inline assembler code can require
1079almost all the registers and the register allocator cannot always handle
1080this situation.
04be94a8 1081
61952351 1082One can disable the string optimizations selectively. Instead of writing
04be94a8
UD
1083
1084 cp = strcpy (foo, "lkj");
1085
1086one can write
1087
1088 cp = (strcpy) (foo, "lkj");
1089
61952351
UD
1090This disables the optimization for that specific call.
1091
4775243a
UD
1092
10933.9. I get compiler messages "Initializer element not constant" with
1094 stdin/stdout/stderr. Why?
1095
1096{RM,AJ} Constructs like:
1097static FILE *InPtr = stdin;
1098
fdacb17d
UD
1099lead to this message. This is correct behaviour with glibc since stdin is
1100not a constant expression. Please note that a strict reading of ISO C does
f12944ec 1101not allow above constructs.
4775243a 1102
f12944ec
UD
1103One of the advantages of this is that you can assign to stdin, stdout, and
1104stderr just like any other global variable (e.g. `stdout = my_stream;'),
1105which can be very useful with custom streams that you can write with libio
fdacb17d 1106(but beware this is not necessarily portable). The reason to implement it
f12944ec 1107this way were versioning problems with the size of the FILE structure.
4775243a 1108
fdacb17d
UD
1109To fix those programs you've got to initialize the variable at run time.
1110This can be done, e.g. in main, like:
1111
1112static FILE *InPtr;
bfcd44c3 1113int main(void)
fdacb17d
UD
1114{
1115 InPtr = stdin;
1116}
1117
1118or by constructors (beware this is gcc specific):
1119
1120static FILE *InPtr;
1121static void inPtr_construct (void) __attribute__((constructor));
1122static void inPtr_construct (void) { InPtr = stdin; }
1123
4775243a
UD
1124
11253.10. I can't compile with gcc -traditional (or
1126 -traditional-cpp). Why?
1127
1128{AJ} glibc2 does break -traditional and -traditonal-cpp - and will continue
fdacb17d 1129to do so. For example constructs of the form:
f12944ec 1130
4775243a
UD
1131enum {foo
1132#define foo foo
1133}
f12944ec
UD
1134
1135are useful for debugging purposes (you can use foo with your debugger that's
1136why we need the enum) and for compatibility (other systems use defines and
1137check with #ifdef).
4775243a
UD
1138
1139
11403.11. I get some errors with `gcc -ansi'. Isn't glibc ANSI compatible?
1141
1142{AJ} The GNU C library is compatible with the ANSI/ISO C standard. If
f12944ec 1143you're using `gcc -ansi', the glibc includes which are specified in the
fdacb17d 1144standard follow the standard. The ANSI/ISO C standard defines what has to be
f12944ec
UD
1145in the include files - and also states that nothing else should be in the
1146include files (btw. you can still enable additional standards with feature
1147flags).
4775243a 1148
f12944ec
UD
1149The GNU C library is conforming to ANSI/ISO C - if and only if you're only
1150using the headers and library functions defined in the standard.
4775243a 1151
a35cb74d
UD
1152
11533.12. I can't access some functions anymore. nm shows that they do
1154 exist but linking fails nevertheless.
1155
f12944ec
UD
1156{AJ} With the introduction of versioning in glibc 2.1 it is possible to
1157export only those identifiers (functions, variables) that are really needed
1158by application programs and by other parts of glibc. This way a lot of
1159internal interfaces are now hidden. nm will still show those identifiers
1160but marking them as internal. ISO C states that identifiers beginning with
1161an underscore are internal to the libc. An application program normally
1162shouldn't use those internal interfaces (there are exceptions,
1163e.g. __ivaliduser). If a program uses these interfaces, it's broken. These
1164internal interfaces might change between glibc releases or dropped
1165completely.
a35cb74d 1166
a5f4e34a
UD
1167
11683.13. When using the db-2 library which comes with glibc is used in
1169 the Perl db modules the testsuite is not passed. This did not
1170 happen with db-1, gdbm, or ndbm.
1171
1172{UD} You are using an outdated copy of the DB_File Perl module. In fact db-2
1173finally removed the handling of zero-sized keys which was one of the features
1174tested by the old Perl testsuite and therefore you see an error. But this
1175never was documented and guaranteed, only broken programs used this feature.
1176
1177Consequently db-2 does not need to support this feature and instead signals
1178an error which leads to easier debugging. The DB_File module maintainer
1179Paul Marquess <pmarquess@bfsec.bt.co.uk> acknowledged this change and fixed
1180the testsuite so that if you use DB_File v1.60 or later you should not have
1181any more problems with db-2.
1182
5148d49f
UD
1183
11843.14. The pow() inline function I get when including <math.h> is broken.
1185 I get segmentation faults when I run the program.
1186
1187{UD} Nope, the implementation is correct. The problem is with egcs version
1188prior to 1.1. I.e., egcs 1.0 to 1.0.3 are all broken (at least on Intel).
1189If you have to use this compiler you must define __NO_MATH_INLINES before
1190including <math.h> to prevent the inline functions from being used. egcs 1.1
1191fixes the problem. I don't know about gcc 2.8 and 2.8.1.
1192
61952351
UD
1193\f
1194. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1195
11964. Miscellaneous
1197
11984.1. After I changed configure.in I get `Autoconf version X.Y.
1199 or higher is required for this script'. What can I do?
1200
1201{UD} You have to get the specified autoconf version (or a later one)
a35cb74d 1202from your favorite mirror of ftp.gnu.org.
61952351 1203
04be94a8 1204
61952351
UD
12054.2. When I try to compile code which uses IPv6 headers and
1206 definitions on my Linux 2.x.y system I am in trouble.
1207 Nothing seems to work.
1208
f12944ec
UD
1209{UD} The problem is that IPv6 development still has not reached a point
1210where the headers are stable. There are still lots of incompatible changes
1211made and the libc headers have to follow.
61952351
UD
1212
1213Also, make sure you have a suitably recent kernel. As of the 970401
4775243a
UD
1214snapshot, according to Philip Blundell <Philip.Blundell@pobox.com>, the
1215required kernel version is at least 2.1.30.
04be94a8 1216
ff44f2a5 1217
aa802e96 12184.3. When I set the timezone by setting the TZ environment variable
ff44f2a5
UD
1219 to EST5EDT things go wrong since glibc computes the wrong time
1220 from this information.
1221
f12944ec
UD
1222{UD} The problem is that people still use the braindamaged POSIX method to
1223select the timezone using the TZ environment variable with a format EST5EDT
1224or whatever. People, read the POSIX standard, the implemented behaviour is
1225correct! What you see is in fact the result of the decisions made while
1226POSIX.1 was created. We've only implemented the handling of TZ this way to
1227be POSIX compliant. It is not really meant to be used.
1228
1229The alternative approach to handle timezones which is implemented is the
1230correct one to use: use the timezone database. This avoids all the problems
1231the POSIX method has plus it is much easier to use. Simply run the tzselect
1232shell script, answer the question and use the name printed in the end by
1233making a symlink to /usr/share/zoneinfo/NAME (NAME is the returned value
1234from tzselect) from the file /etc/localtime. That's all. You never again
1235have to worry.
1236
1237So, please avoid sending bug reports about time related problems if you use
1238the POSIX method and you have not verified something is really broken by
1239reading the POSIX standards.
ff44f2a5 1240
fdacb17d
UD
1241
12424.4. What other sources of documentation about glibc are available?
1243
1244{AJ} The FSF has a page about the GNU C library at
1245<http://www.gnu.org/software/libc/>. The problem data base of open and
1246solved bugs in GNU libc is available at
1247<http://www-gnats.gnu.org:8080/cgi-bin/wwwgnats.pl>. Eric Green has written
1248a HowTo for converting from Linux libc5 to glibc2. The HowTo is accessable
1249via the FSF page and at <http://www.imaxx.net/~thrytis/glibc>. Frodo
1250Looijaard describes a different way installing glibc2 as secondary libc at
1251<http://huizen.dds.nl/~frodol/glibc>.
1252
1253Please note that this is not a complete list.
1254
f8cac037 1255\f
61952351
UD
1256~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
1257
f8cac037
RM
1258Answers were given by:
1259{UD} Ulrich Drepper, <drepper@cygnus.com>
613a76ff 1260{DMT} David Mosberger-Tang, <davidm@AZStarNet.com>
dd7d45e8 1261{RM} Roland McGrath, <roland@gnu.org>
1f205a47 1262{AJ} Andreas Jaeger, <aj@arthur.rhein-neckar.de>
22d57dd3 1263{EY} Eric Youngdale, <eric@andante.jic.com>
a5a0310d 1264{PB} Phil Blundell, <Philip.Blundell@pobox.com>
af6f3906 1265{MK} Mark Kettenis, <kettenis@phys.uva.nl>
f4017d20 1266{ZW} Zack Weinberg, <zack@rabi.phys.columbia.edu>
4775243a 1267{TK} Thorsten Kukuk, <kukuk@vt.uni-paderborn.de>
8619129f 1268{GK} Geoffrey Keating, <geoffk@ozemail.com.au>
a35cb74d 1269{HJ} H.J. Lu, <hjl@gnu.org>
f8cac037
RM
1270\f
1271Local Variables:
61952351
UD
1272 mode:outline
1273 outline-regexp:"\\?"
f12944ec 1274 fill-column:76
f8cac037 1275End:
This page took 0.210202 seconds and 5 git commands to generate.