aboutsummaryrefslogtreecommitdiff
path: root/FAQ.in
diff options
context:
space:
mode:
authorAndreas Jaeger <aj@suse.de>2012-05-03 09:46:57 +0200
committerAndreas Jaeger <aj@suse.de>2012-05-03 09:46:57 +0200
commit7ac30cc5f0460b72646abffee96584e063f96b5a (patch)
treea355588263e608d007b06a98e5588897b70a02f9 /FAQ.in
parente2dbf201abdfa13fc4035a1a8888ecec91bef44c (diff)
downloadglibc-7ac30cc5f0460b72646abffee96584e063f96b5a.tar.xz
glibc-7ac30cc5f0460b72646abffee96584e063f96b5a.zip
Move FAQ to wiki
The FAQ is now at http://sourceware.org/glibc/wiki/FAQ and not anymore part of the repository.
Diffstat (limited to 'FAQ.in')
-rw-r--r--FAQ.in1701
1 files changed, 0 insertions, 1701 deletions
diff --git a/FAQ.in b/FAQ.in
deleted file mode 100644
index 216155c763..0000000000
--- a/FAQ.in
+++ /dev/null
@@ -1,1701 +0,0 @@
- Frequently Asked Questions about the GNU C Library
-
-This document tries to answer questions a user might have when installing
-and using glibc. Please make sure you read this before sending questions or
-bug reports to the maintainers.
-
-The GNU C library is very complex. The installation process has not been
-completely automated; there are too many variables. You can do substantial
-damage to your system by installing the library incorrectly. Make sure you
-understand what you are undertaking before you begin.
-
-If you have any questions you think should be answered in this document,
-please let me know.
-
- --drepper@redhat.com
-
-? Compiling glibc
-
-?? What systems does the GNU C Library run on?
-
-{UD} This is difficult to answer. The file `README' lists the architectures
-GNU libc was known to run on *at some time*. This does not mean that it
-still can be compiled and run on them now.
-
-The systems glibc is known to work on as of this release, and most probably
-in the future, are:
-
- *-*-gnu GNU Hurd
- i[3456]86-*-linux-gnu Linux-2.x on Intel
- m68k-*-linux-gnu Linux-2.x on Motorola 680x0
- alpha*-*-linux-gnu Linux-2.x on DEC Alpha
- powerpc-*-linux-gnu Linux and MkLinux on PowerPC systems
- powerpc64-*-linux-gnu Linux-2.4+ on 64-bit PowerPC systems
- sparc-*-linux-gnu Linux-2.x on SPARC
- sparc64-*-linux-gnu Linux-2.x on UltraSPARC
- arm-*-none ARM standalone systems
- arm-*-linux Linux-2.x on ARM
- arm-*-linuxaout Linux-2.x on ARM using a.out binaries
- mips*-*-linux-gnu Linux-2.x on MIPS
- ia64-*-linux-gnu Linux-2.x on ia64
- s390-*-linux-gnu Linux-2.x on IBM S/390
- s390x-*-linux-gnu Linux-2.x on IBM S/390 64-bit
- cris-*-linux-gnu Linux-2.4+ on CRIS
-
-Ports to other Linux platforms are in development, and may in fact work
-already, but no one has sent us success reports for them. Currently no
-ports to other operating systems are underway, although a few people have
-expressed interest.
-
-If you have a system not listed above (or in the `README' file) and you are
-really interested in porting it, see the GNU C Library web pages to learn
-how to start contributing:
-
- http://www.gnu.org/software/libc/resources.html
-
-??binsize What compiler do I need to build GNU libc?
-
-{UD} You must use GNU CC to compile GNU libc. A lot of extensions of GNU CC
-are used to increase portability and speed.
-
-GNU CC is found, like all other GNU packages, on
-
- ftp://ftp.gnu.org/pub/gnu
-
-and the many mirror sites. ftp.gnu.org is always overloaded, so try to find
-a local mirror first.
-
-You should always try to use the latest official release. Older versions
-may not have all the features GNU libc requires. The current releases of
-gcc (3.2 or newer) should work with the GNU C library (for MIPS see ?mips).
-
-Please note that gcc 2.95 and 2.95.x cannot compile glibc on Alpha due to
-problems in the complex float support.
-
-?? When I try to compile glibc I get only error messages.
- What's wrong?
-
-{UD} You definitely need GNU make to build GNU libc. No other make
-program has the needed functionality.
-
-We recommend version GNU make version 3.79 or newer. Older versions have
-bugs and/or are missing features.
-
-?? Do I need a special linker or assembler?
-
-{ZW} If you want a shared library, you need a linker and assembler that
-understand all the features of ELF, including weak and versioned symbols.
-The static library can be compiled with less featureful tools, but lacks key
-features such as NSS.
-
-For Linux or Hurd, you want binutils 2.13 or higher. These are the only
-versions we've tested and found reliable. Other versions may work but we
-don't recommend them, especially not when C++ is involved.
-
-Other operating systems may come with system tools that have all the
-necessary features, but this is moot because glibc hasn't been ported to
-them.
-
-??powerpc Which compiler should I use for powerpc?
-
-{} Removed. Does not apply anymore.
-
-??arm Which tools should I use for ARM?
-
-{} Removed. Does not apply anymore.
-
-?? Do I need some more things to compile the GNU C Library?
-
-{UD} Yes, there are some more :-).
-
-* GNU gettext. This package contains the tools needed to construct
- `message catalog' files containing translated versions of system
- messages. See ftp://ftp.gnu.org/pub/gnu or better any mirror
- site. (We distribute compiled message catalogs, but they may not be
- updated in patches.)
-
-* Some files are built with special tools. E.g., files ending in .gperf
- need a `gperf' program. The GNU version (now available in a separate
- package, formerly only as part of libg++) is known to work while some
- vendor versions do not.
-
- You should not need these tools unless you change the source files.
-
-* Perl 5 is needed if you wish to test an installation of GNU libc
- as the primary C library.
-
-* When compiling for Linux, the header files of the Linux kernel must
- be available to the compiler as <linux/*.h> and <asm/*.h>.
-
-* lots of disk space (~400MB for i?86-linux; more for RISC platforms).
-
-* plenty of time. Compiling just the shared and static libraries for
- 35mins on a 2xPIII@550Mhz w/ 512MB RAM. On a 2xUltraSPARC-II@360Mhz
- w/ 1GB RAM it takes about 14 minutes. Multiply this by 1.5 or 2.0
- if you build profiling and/or the highly optimized version as well.
- For Hurd systems times are much higher.
-
- You should avoid compiling in a NFS mounted filesystem. This is
- very slow.
-
- James Troup <J.J.Troup@comp.brad.ac.uk> reports a compile time for
- an earlier (and smaller!) version of glibc of 45h34m for a full build
- (shared, static, and profiled) on Atari Falcon (Motorola 68030 @ 16 Mhz,
- 14 Mb memory) and Jan Barte <yann@plato.uni-paderborn.de> reports
- 22h48m on Atari TT030 (Motorola 68030 @ 32 Mhz, 34 Mb memory)
-
- A full build of the PowerPC library took 1h on a PowerPC 750@400Mhz w/
- 64MB of RAM, and about 9h on a 601@60Mhz w/ 72Mb.
-
-?? What version of the Linux kernel headers should be used?
-
-{AJ,UD} The headers from the most recent Linux kernel should be used. The
-headers used while compiling the GNU C library and the kernel binary used
-when using the library do not need to match. The GNU C library runs without
-problems on kernels that are older than the kernel headers used. The other
-way round (compiling the GNU C library with old kernel headers and running
-on a recent kernel) does not necessarily work. For example you can't use
-new kernel features if you used old kernel headers to compile the GNU C
-library.
-
-{ZW} Even if you are using a 2.0 kernel on your machine, we recommend you
-compile GNU libc with 2.2 kernel headers. That way you won't have to
-recompile libc if you ever upgrade to kernel 2.2. To tell libc which
-headers to use, give configure the --with-headers switch
-(e.g. --with-headers=/usr/src/linux-2.2.0/include).
-
-Note that you must configure the 2.2 kernel if you do this, otherwise libc
-will be unable to find <linux/version.h>. Just change the current directory
-to the root of the 2.2 tree and do `make include/linux/version.h'.
-
-?? The compiler hangs while building iconvdata modules. What's
- wrong?
-
-{} Removed. Does not apply anymore.
-
-?? When I run `nm -u libc.so' on the produced library I still
- find unresolved symbols. Can this be ok?
-
-{UD} Yes, this is ok. There can be several kinds of unresolved symbols:
-
-* magic symbols automatically generated by the linker. These have names
- like __start_* and __stop_*
-
-* symbols starting with _dl_* come from the dynamic linker
-
-* weak symbols, which need not be resolved at all (fabs for example)
-
-Generally, you should make sure you find a real program which produces
-errors while linking before deciding there is a problem.
-
-??addon What are these `add-ons'?
-
-{UD} To avoid complications with export rules or external source code some
-optional parts of the libc are distributed as separate packages, e.g., the
-linuxthreads package.
-
-To use these packages as part of GNU libc, just unpack the tarfiles in the
-libc source directory and tell the configuration script about them using the
---enable-add-ons option. If you give just --enable-add-ons configure tries
-to find all the add-on packages in your source tree. This may not work. If
-it doesn't, or if you want to select only a subset of the add-ons, give a
-comma-separated list of the add-ons to enable:
-
- configure --enable-add-ons=linuxthreads
-
-for example.
-
-Add-ons can add features (including entirely new shared libraries), override
-files, provide support for additional architectures, and just about anything
-else. The existing makefiles do most of the work; only some few stub rules
-must be written to get everything running.
-
-Most add-ons are tightly coupled to a specific GNU libc version. Please
-check that the add-ons work with the GNU libc. For example the linuxthreads
-add-on has the same numbering scheme as the libc and will in general only
-work with the corresponding libc.
-
-{AJ} With glibc 2.2 the crypt add-on and with glibc 2.1 the localedata
-add-on have been integrated into the normal glibc distribution, crypt and
-localedata are therefore not anymore add-ons.
-
-?? My XXX kernel emulates a floating-point coprocessor for me.
- Should I enable --with-fp?
-
-{ZW} An emulated FPU is just as good as a real one, as far as the C library
-is concerned. You only need to say --without-fp if your machine has no way
-to execute floating-point instructions.
-
-People who are interested in squeezing the last drop of performance
-out of their machine may wish to avoid the trap overhead, but this is
-far more trouble than it's worth: you then have to compile
-*everything* this way, including the compiler's internal libraries
-(libgcc.a for GNU C), because the calling conventions change.
-
-?? When compiling GNU libc I get lots of errors saying functions
- in glibc are duplicated in libgcc.
-
-{EY} This is *exactly* the same problem that I was having. The problem was
-due to the fact that configure didn't correctly detect that the linker flag
---no-whole-archive was supported in my linker. In my case it was because I
-had run ./configure with bogus CFLAGS, and the test failed.
-
-One thing that is particularly annoying about this problem is that once this
-is misdetected, running configure again won't fix it unless you first delete
-config.cache.
-
-{UD} Starting with glibc-2.0.3 there should be a better test to avoid some
-problems of this kind. The setting of CFLAGS is checked at the very
-beginning and if it is not usable `configure' will bark.
-
-?? Why do I get messages about missing thread functions when I use
- librt? I don't even use threads.
-
-{UD} In this case you probably mixed up your installation. librt uses
-threads internally and has implicit references to the thread library.
-Normally these references are satisfied automatically but if the thread
-library is not in the expected place you must tell the linker where it is.
-When using GNU ld it works like this:
-
- gcc -o foo foo.c -Wl,-rpath-link=/some/other/dir -lrt
-
-The `/some/other/dir' should contain the thread library. `ld' will use the
-given path to find the implicitly referenced library while not disturbing
-any other link path.
-
-?? What's the problem with configure --enable-omitfp?
-
-{} Removed. Does not apply anymore.
-
-?? I get failures during `make check'. What should I do?
-
-{AJ} The testsuite should compile and run cleanly on your system; every
-failure should be looked into. Depending on the failures, you probably
-should not install the library at all.
-
-You should consider reporting it in bugzilla
-<http://sourceware.org/bugzilla/> providing as much detail as possible.
-If you run a test directly, please remember to set up the environment
-correctly. You want to test the compiled library - and not your installed
-one. The best way is to copy the exact command line which failed and run
-the test from the subdirectory for this test in the sources.
-
-There are some failures which are not directly related to the GNU libc:
-- Some compilers produce buggy code. No compiler gets single precision
- complex numbers correct on Alpha. Otherwise, gcc-3.2 should be ok.
-- The kernel might have bugs. For example on Linux/Alpha 2.0.34 the
- floating point handling has quite a number of bugs and therefore most of
- the test cases in the math subdirectory will fail. Linux 2.2 has
- fixes for the floating point support on Alpha. The Linux/SPARC kernel has
- also some bugs in the FPU emulation code (as of Linux 2.2.0).
-- Other tools might have problems. For example bash 2.03 gives a
- segmentation fault running the tst-rpmatch.sh test script.
-
-?? What is symbol versioning good for? Do I need it?
-
-{AJ} Symbol versioning solves problems that are related to interface
-changes. One version of an interface might have been introduced in a
-previous version of the GNU C library but the interface or the semantics of
-the function has been changed in the meantime. For binary compatibility
-with the old library, a newer library needs to still have the old interface
-for old programs. On the other hand, new programs should use the new
-interface. Symbol versioning is the solution for this problem. The GNU
-libc version 2.1 uses symbol versioning by default if the installed binutils
-supports it.
-
-We don't advise building without symbol versioning, since you lose binary
-compatibility - forever! The binary compatibility you lose is not only
-against the previous version of the GNU libc (version 2.0) but also against
-all future versions.
-
-?? How can I compile on my fast ix86 machine a working libc for my slow
- i386? After installing libc, programs abort with "Illegal
- Instruction".
-
-{AJ} glibc and gcc might generate some instructions on your machine that
-aren't available on i386. You've got to tell glibc that you're configuring
-for i386 with adding i386 as your machine, for example:
-
- ../configure --prefix=/usr i386-pc-linux-gnu
-
-And you need to tell gcc to only generate i386 code, just add `-mcpu=i386'
-(just -m386 doesn't work) to your CFLAGS.
-
-{UD} This applies not only to the i386. Compiling on a i686 for any older
-model will also fail if the above methods are not used.
-
-?? `make' complains about a missing dlfcn/libdl.so when building
- malloc/libmemprof.so. How can I fix this?
-
-{AJ} Older make version (<= 3.78.90) have a bug which was hidden by a bug in
-glibc (<= 2.1.2). You need to upgrade make to a newer or fixed version.
-
-After upgrading make, you should remove the file sysd-sorted in your build
-directory. The problem is that the broken make creates a wrong order for
-one list in that file. The list has to be recreated with the new make -
-which happens if you remove the file.
-
-You might encounter this bug also in other situations where make scans
-directories. I strongly advise to upgrade your make version to 3.79 or
-newer.
-
-
-??mips Which tools should I use for MIPS?
-
-{AJ} You should use the current development version of gcc 3.2 or newer from
-CVS.
-
-You need also recent binutils, anything before and including 2.11 will not
-work correctly. Either try the Linux binutils 2.11.90.0.5 from HJ Lu or the
-current development version of binutils from CVS.
-
-Please note that `make check' might fail for a number of the math tests
-because of problems of the FPU emulation in the Linux kernel (the MIPS FPU
-doesn't handle all cases and needs help from the kernel).
-
-
-??powerpc64 Which compiler should I use for powerpc64?
-
-{SM} You want to use at least gcc 3.2 (together with the right versions
-of all the other tools, of course).
-
-?? `make' fails when running rpcgen the first time,
- what is going on? How do I fix this?
-
-{CO} The first invocation of rpcgen is also the first use of the recently
-compiled dynamic loader. If there is any problem with the dynamic loader
-it will more than likely fail to run rpcgen properly. This could be due to
-any number of problems.
-
-The only real solution is to debug the loader and determine the problem
-yourself. Please remember that for each architecture there may be various
-patches required to get glibc HEAD into a runnable state. The best course
-of action is to determine if you have all the required patches.
-
-?? Why do I get:
- `#error "glibc cannot be compiled without optimization"',
- when trying to compile GNU libc with GNU CC?
-
-{AJ,CO} There are a couple of reasons why the GNU C library will not work
-correctly if it is not complied with optimzation.
-
-In the early startup of the dynamic loader (_dl_start), before
-relocation of the PLT, you cannot make function calls. You must inline
-the functions you will use during early startup, or call compiler
-builtins (__builtin_*).
-
-Without optimizations enabled GNU CC will not inline functions. The
-early startup of the dynamic loader will make function calls via an
-unrelocated PLT and crash.
-
-Without auditing the dynamic linker code it would be difficult to remove
-this requirement.
-
-Another reason is that nested functions must be inlined in many cases to
-avoid executable stacks.
-
-In practice there is no reason to compile without optimizations, therefore
-we require that GNU libc be compiled with optimizations enabled.
-
-? Installation and configuration issues
-
-?? Can I replace the libc on my Linux system with GNU libc?
-
-{UD} You cannot replace any existing libc for Linux with GNU libc. It is
-binary incompatible and therefore has a different major version. You can,
-however, install it alongside your existing libc.
-
-For Linux there are three major libc versions:
- libc-4 a.out libc
- libc-5 original ELF libc
- libc-6 GNU libc
-
-You can have any combination of these three installed. For more information
-consult documentation for shared library handling. The Makefiles of GNU
-libc will automatically generate the needed symbolic links which the linker
-will use.
-
-?? How do I configure GNU libc so that the essential libraries
- like libc.so go into /lib and the other into /usr/lib?
-
-{UD,AJ} Like all other GNU packages GNU libc is designed to use a base
-directory and install all files relative to this. The default is
-/usr/local, because this is safe (it will not damage the system if installed
-there). If you wish to install GNU libc as the primary C library on your
-system, set the base directory to /usr (i.e. run configure --prefix=/usr
-<other_options>). Note that this can damage your system; see ?safety for
-details.
-
-Some systems like Linux have a filesystem standard which makes a difference
-between essential libraries and others. Essential libraries are placed in
-/lib because this directory is required to be located on the same disk
-partition as /. The /usr subtree might be found on another
-partition/disk. If you configure for Linux with --prefix=/usr, then this
-will be done automatically.
-
-To install the essential libraries which come with GNU libc in /lib on
-systems other than Linux one must explicitly request it. Autoconf has no
-option for this so you have to use a `configparms' file (see the `INSTALL'
-file for details). It should contain:
-
-slibdir=/lib
-sysconfdir=/etc
-
-The first line specifies the directory for the essential libraries, the
-second line the directory for system configuration files.
-
-??safety How should I avoid damaging my system when I install GNU libc?
-
-{ZW} If you wish to be cautious, do not configure with --prefix=/usr. If
-you don't specify a prefix, glibc will be installed in /usr/local, where it
-will probably not break anything. (If you wish to be certain, set the
-prefix to something like /usr/local/glibc2 which is not used for anything.)
-
-The dangers when installing glibc in /usr are twofold:
-
-* glibc will overwrite the headers in /usr/include. Other C libraries
- install a different but overlapping set of headers there, so the effect
- will probably be that you can't compile anything. You need to rename
- /usr/include out of the way before running `make install'. (Do not throw
- it away; you will then lose the ability to compile programs against your
- old libc.)
-
-* None of your old libraries, static or shared, can be used with a
- different C library major version. For shared libraries this is not a
- problem, because the filenames are different and the dynamic linker
- will enforce the restriction. But static libraries have no version
- information. You have to evacuate all the static libraries in
- /usr/lib to a safe location.
-
-The situation is rather similar to the move from a.out to ELF which
-long-time Linux users will remember.
-
-?? Do I need to use GNU CC to compile programs that will use the
- GNU C Library?
-
-{ZW} In theory, no; the linker does not care, and the headers are supposed
-to check for GNU CC before using its extensions to the C language.
-
-However, there are currently no ports of glibc to systems where another
-compiler is the default, so no one has tested the headers extensively
-against another compiler. You may therefore encounter difficulties. If you
-do, please report them as bugs.
-
-Also, in several places GNU extensions provide large benefits in code
-quality. For example, the library has hand-optimized, inline assembly
-versions of some string functions. These can only be used with GCC. See
-?string for details.
-
-??crypt When linking with the new libc I get unresolved symbols
- `crypt' and `setkey'. Why aren't these functions in the
- libc anymore?
-
-
-{} Removed. Does not apply anymore.
-
-?? When I use GNU libc on my Linux system by linking against
- the libc.so which comes with glibc all I get is a core dump.
-
-{UD} On Linux, gcc sets the dynamic linker to /lib/ld-linux.so.1 unless the
-user specifies a --dynamic-linker argument. This is the name of the libc5
-dynamic linker, which does not work with glibc.
-
-For casual use of GNU libc you can just specify to the linker
- --dynamic-linker=/lib/ld-linux.so.2
-
-which is the glibc dynamic linker, on Linux systems. On other systems the
-name is /lib/ld.so.1. When linking via gcc, you've got to add
- -Wl,--dynamic-linker=/lib/ld-linux.so.2
-
-to the gcc command line.
-
-To change your environment to use GNU libc for compiling you need to change
-the `specs' file of your gcc. This file is normally found at
-
- /usr/lib/gcc-lib/<arch>/<version>/specs
-
-In this file you have to change a few things:
-
-- change `ld-linux.so.1' to `ld-linux.so.2'
-
-- remove all expression `%{...:-lgmon}'; there is no libgmon in glibc
-
-- fix a minor bug by changing %{pipe:-} to %|
-
-Here is what the gcc-2.7.2 specs file should look like when GNU libc is
-installed at /usr:
-
------------------------------------------------------------------------
-*asm:
-%{V} %{v:%{!V:-V}} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*}
-
-*asm_final:
-%|
-
-*cpp:
-%{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} %{!m386:-D__i486__} %{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}
-
-*cc1:
-%{profile:-p}
-
-*cc1plus:
-
-
-*endfile:
-%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s
-
-*link:
--m elf_i386 %{shared:-shared} %{!shared: %{!ibcs: %{!static: %{rdynamic:-export-dynamic} %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}} %{static:-static}}}
-
-*lib:
-%{!shared: %{pthread:-lpthread} %{profile:-lc_p} %{!profile: -lc}}
-
-*libgcc:
--lgcc
-
-*startfile:
-%{!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}
-
-*switches_need_spaces:
-
-
-*signed_char:
-%{funsigned-char:-D__CHAR_UNSIGNED__}
-
-*predefines:
--D__ELF__ -Dunix -Di386 -Dlinux -Asystem(unix) -Asystem(posix) -Acpu(i386) -Amachine(i386)
-
-*cross_compile:
-0
-
-*multilib:
-. ;
-
------------------------------------------------------------------------
-
-Things get a bit more complicated if you have GNU libc installed in some
-other place than /usr, i.e., if you do not want to use it instead of the old
-libc. In this case the needed startup files and libraries are not found in
-the regular places. So the specs file must tell the compiler and linker
-exactly what to use.
-
-Version 2.7.2.3 does and future versions of GCC will automatically
-provide the correct specs.
-
-??nonsh Looking through the shared libc file I haven't found the
- functions `stat', `lstat', `fstat', and `mknod' and while
- linking on my Linux system I get error messages. How is
- this supposed to work?
-
-{RM} Believe it or not, stat and lstat (and fstat, and mknod) are supposed
-to be undefined references in libc.so.6! Your problem is probably a missing
-or incorrect /usr/lib/libc.so file; note that this is a small text file now,
-not a symlink to libc.so.6. It should look something like this:
-
-GROUP ( libc.so.6 libc_nonshared.a )
-
-??excpt When I run an executable on one system which I compiled on
- another, I get dynamic linker errors. Both systems have the same
- version of glibc installed. What's wrong?
-
-{ZW} Glibc on one of these systems was compiled with gcc 2.7 or 2.8, the
-other with egcs (any version). Egcs has functions in its internal
-`libgcc.a' to support exception handling with C++. They are linked into
-any program or dynamic library compiled with egcs, whether it needs them or
-not. Dynamic libraries then t