Wie installiere ich unter Debian (64-Bit) glibc, das ich aus dem Quellcode erstellt habe?

Wie installiere ich unter Debian (64-Bit) glibc, das ich aus dem Quellcode erstellt habe?

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.2in installiert hat, aber beim Laden eines Programms die alte Version von in statt der neuen Version von in /lib64gefunden hat . (Offensichtlich müssen ld und libc übereinstimmen?)libc.so.6/lib/x86_64-linux-gnu/lib64

Ich habe versucht, /lib64oben einzufügen /etc/ld.so.conf.d/x86_64-linux-gnu.confund 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:

  1. /libIch habe den Inhalt von , /lib32, und gesichert /lib64.

  2. Ich habe es bearbeitet , um es oben in den Suchpfaden /etc/ld.so.conf.d/x86_64-linux-gnu.confzu platzieren ./lib64

  3. Ich habe die neue Version von glibc (2.19) mit Optionen konfiguriert, --prefix=/usr --enable-kernel=2.6.26um sie an die alte glibc-Version (2.13) anzupassen.

  4. Ich habe die neue glibc erstellt. Das verlief ohne besondere Vorkommnisse.

  5. Ich habe sumir Root-Rechte verschafft und ausgeführt make install. Die Installation begann, dann kam es nach der ld-linux-x86-64.so.2Installation des neuen zu einem Segmentierungsfehler und es wurde immer noch das alte abgerufen libc.so.6.

  6. Um dies zu beheben, habe ich ausgeführt ldconfig(natürlich immer noch als Root).

  7. Ich habe die Installation neu gestartet ( make install). Bei einem Befehl, der aufgerufen hat, ist erneut ein Fehler aufgetreten gcc. 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.habgerufen ./usr/include/x86_64-linux-gnu/sys/cdefs.h/usr/include/sys/cdefs.h

  8. Um dies zu beheben, habe ich das Verzeichnis entfernt /usr/include/x86_64-linux-gnu/sysund durch einen symbolischen Link auf ersetzt /usr/include/sys. Außerdem habe ich die Header a.out.h, fpu_control.h, und ieee754.hin /usr/include/x86_64-linux-gnudurch symbolische Links zu ihren neuen Versionen in ersetzt /usr/include.

  9. 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.

verwandte Informationen