Als ich das versuchte, brach mein System zusammen und jedes Programm verursachte sofort einen Segmentierungsfehler. Ich glaube, das liegt daran, dass es eine neue Version von ld-linux-x86-64.so.2
in installiert hat, aber beim Laden eines Programms die alte Version von in statt der neuen Version von in /lib64
gefunden hat . (Offensichtlich müssen ld und libc übereinstimmen?)libc.so.6
/lib/x86_64-linux-gnu
/lib64
Ich habe versucht, /lib64
oben einzufügen /etc/ld.so.conf.d/x86_64-linux-gnu.conf
und dann auszuführen ldconfig
. Aus irgendeinem Grund hat dies jedoch nichts behoben.
Antwort1
Während ich nach etwas anderem suchte, entdeckte ich zufällig, warum meine Installation die alte libc auswählte: weil die neue libc eine ältere ABI-Version hatte (https://stackoverflow.com/questions/20577638/library-path-order-for-alternate-glibc-dynamic-linker-ld-so).
Also habe ich Folgendes getan:
/lib
Ich habe den Inhalt von ,/lib32
, und gesichert/lib64
.Ich habe es bearbeitet , um es oben in den Suchpfaden
/etc/ld.so.conf.d/x86_64-linux-gnu.conf
zu platzieren ./lib64
Ich habe die neue Version von glibc (2.19) mit Optionen konfiguriert,
--prefix=/usr --enable-kernel=2.6.26
um sie an die alte glibc-Version (2.13) anzupassen.Ich habe die neue glibc erstellt. Das verlief ohne besondere Vorkommnisse.
Ich habe
su
mir Root-Rechte verschafft und ausgeführtmake install
. Die Installation begann, dann kam es nach derld-linux-x86-64.so.2
Installation des neuen zu einem Segmentierungsfehler und es wurde immer noch das alte abgerufenlibc.so.6
.Um dies zu beheben, habe ich ausgeführt
ldconfig
(natürlich immer noch als Root).Ich habe die Installation neu gestartet (
make install
). Bei einem Befehl, der aufgerufen hat, ist erneut ein Fehler aufgetretengcc
. Ich habe festgestellt, dass dies an nicht übereinstimmenden Headern lag: Die neue Version hat die alte und nicht die neue Version bei/usr/include/stdio.h
abgerufen ./usr/include/x86_64-linux-gnu/sys/cdefs.h
/usr/include/sys/cdefs.h
Um dies zu beheben, habe ich das Verzeichnis entfernt
/usr/include/x86_64-linux-gnu/sys
und durch einen symbolischen Link auf ersetzt/usr/include/sys
. Außerdem habe ich die Headera.out.h
,fpu_control.h
, undieee754.h
in/usr/include/x86_64-linux-gnu
durch symbolische Links zu ihren neuen Versionen in ersetzt/usr/include
.Ich habe die Installation noch einmal neu gestartet (
make install
). Schließlich war es erfolgreich.
Nachdem ich mein System neu gestartet hatte, funktionierte alles einwandfrei.
Ich habe noch nicht herausgefunden, was passiert, wenn ich versuche, auch die 32-Bit-Version von libc zu aktualisieren, die neben der 64-Bit-Version auf meinem System installiert ist. Ich vermute, dass es wieder alles schrecklich kaputt machen wird. Ich werde diese Antwort aktualisieren, wenn ich Erfolg habe.