» | Kernel Trees | |||||
» | Tebecai | |||||
frodo.looijaard.name | » | Documentation | » | Glibc-2 (libc6) | » | ld.so |
» | Copyrights | |||||
» | Introduction | |||||
» | Other docs | |||||
» | Overview | |||||
» | Downloads | |||||
» | Preliminaries | |||||
» | gcc | |||||
» | binutils | |||||
» | libc6 | |||||
» | gcc (cross) | |||||
» | libc5 | |||||
» | libc++ | |||||
» | Cleaning up | |||||
» | Examples | |||||
» | Going on | |||||
» | Known problems | |||||
» | Essay | |||||
» | Changelog |
Note that this documentation is historic. It may no longer be very relevant. There will be no updates or further releases.
⇐ Previous | ⇑ Parent |
Next ⇒ |
This is the second step in installing glibc-2. Before we install anything for glibc-2, we first update the dynamic linker. This is the program that admistrates all shared libraries and loads them when needed. Glibc uses its own dynamic linker, but the old dynamic linker must cooperate with it. Only versions newer than 1.9.0 do that.
Even though this is a relative step-by-step guide, it would be wise to read the most important documentation yourself; especially the README file. The newest public version as of the writing of this document is ld.so-1.9.9. Installation of newer versions may differ slightly.
Installing the dynamic linker is potentially dangerous. If something would go really wrong (fortunately, that is not very likely), you could be left with a system that can not run anything. It is sensible to check you have a set of rescue disks somewhere that you can use to boot the system with if everything else fails.
You should apply both patches; they are needed if you want to follow this step-by-step guide.
File | Description |
---|---|
ldso199-p1.diff | Disable test programs |
ldso199-p2.diff | Set correct compiler path |
You can apply this patch by entering the ld.so directory and using the following command:
(bash) patch -p1 -E < filename
I will assume you use bash as shell; if not, some commands may slightly differ. I will explain each step.
(bash) make clean
ld.so comes with pre-compiled binaries; this throws them away, so we can compile them ourselves.
(bash) make AOUT_SUPPORT=false
This recreates all binaries. I assume here you have no old libc-4 a.out binaries lying around; if you have, you must change false
to true
.
(bash) ./instldso.sh --force --devfiles
This installs the dynamic linker. Remember you must be root to do this. The --force argument is there to force you to read the README
file. Please do read it before installing! The --devfiles
argument is needed because libc-5 is our main C-library. If you want to know what will be installed, you can add env PREFIX=/tmp
at the very beginning of the commandline to install the dynamic linker at a temporary location. Do not forget to do a proper installation afterwards!
Try running ldconfig -p
. You should get a long list of installed libraries on your system:
(bash) ldconfig -p
94 libs found in cache `/etc/ld.so.cache' (version 1.7.0)
libz.so.1.0.4 (ELF) => /usr/lib/libz.so.1.0.4
libz.so (ELF) => /usr/lib/libz.so
[....]
ld-linux.so.1 (ELF) => /lib/ld-linux.so.1
ldd -v
should report the same version as the dynamic linker:
(bash) ldd -v
ldd: version 1.9.9
Finally, you should be able to run commands like /bin/ps
(specify the path explicitely to disable shell builtins).
You can find a manifest of all installed files here.
If something went hideously wrong, you probably can't run any programs anymore. Do not log out! Fortunately, in almost every distribution there is a program sln
that is statically linked and creates symbolic links. Even if ls
does not work anymore, you can still use echo *
. Go to /lib
and look for a file ld-linux.so.1.?.?
. Now try this command:
(bash) sln ld-linux.so.1.?.? ld-linux.so.1
Substitute the version you found for the question marks. With a little luck, everything should work again. If this does not help, you will have to use a rescue disk to boot with and correct the problem...
⇐ Previous | ⇑ Parent |
Next ⇒ |