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