Wie kann ich ein älteres gcc (speziell 4.5.2) unter Ubuntu 11.10 erstellen und Fehler in Bezug auf "/ usr / bin / ld: crti.o: Keine solche Datei oder kein solches Verzeichnis finden" vermeiden?
Ich habe ein bisschen gegraben und mehrere ähnliche Gegenstände gefunden, aber keine, die mein Problem tatsächlich lösen:
- Ich habe überprüft, ob alle meine Pakete (libc6-dev und dergleichen) gemäß dieser Frage neu installiert wurden
- Ich habe überprüft, ob crti.o in / usr / lib32 und / usr / lib / x86_64-linux-gnu vorhanden ist und dass meine ld.so.conf so konfiguriert ist, dass sie in diesen Verzeichnissen angezeigt wird
- Ich habe überprüft, dass das Voranstellen meines Make-Aufrufs mit LIBRARY_PATH = / usr / lib / x86_64-linux-gnu funktioniert, möchte dies jedoch vermeiden (dies wird zu einem divergierenden Punkt in Makefiles).
- Ich habe verschiedene Dinge mit --with-build-sysroot ausprobiert, aber ohne Erfolg (lesen Sie: Vielleicht weiß ich einfach nicht, welche Flagge ich setzen soll)
Wenn ich mit Strace laufe (gemäß dieser Antwort ), kann ich den bloßen Verweis auf crti.o sehen:
13240 open ("crti.o", O_RDONLY) = -1 ENOENT (Keine solche Datei oder kein solches Verzeichnis)
Vielen Dank!
Selbst sehr neue Versionen von GCC schlagen mit dieser Meldung fehl. Dies liegt daran, dass die neuen Debian / Ubuntu-Versionen Multiarch unterstützen (dh Binärdateien für mehrere Computer in einem Dateisystem installieren), sodass die Bibliotheken von den Standardpositionen entfernt wurden.
Es gibt GCC Patches , es zu beheben hier (noch nicht endgültige Fassung genehmigt, aber richtig für Ubuntu), und sie wahrscheinlich zu älteren GCC ohne viel Aufwand anwenden, vielleicht. Ich denke, Sie müssen GCC mit --enable-multiarch konfigurieren oder so.
In der Zwischenzeit ist das Erstellen von Softlinks eine gute Lösung:
(Der Ordnername unterscheidet sich bei 32-Bit-Installationen.)
Ich hoffe, das hilft.
quelle
Ich habe dieses Problem mit einigen Problemumgehungen gelöst, die für Sie nützlich sein könnten.
Erstellen Sie zunächst GCC mit
LIBRARY_PATH=/usr/lib/x86_64-linux-gnu
, damit der Build-Bootstrap-Prozess weiß, wo sich diecrt?.o
Startdateien befinden.Anstatt
crt?.o
Symlinks/usr/lib
dort zu erstellen, wo sie Ihr gesamtes System betreffen, können Sie diese drei Dateien mit dem${prefix}/lib/gcc/...
Verzeichnis verknüpfen, das dem Verzeichnis entspricht, in dem${prefix}/bin
diegcc
ausführbare Datei installiert ist. Das befindet sich also fast ganz oben auf dem Suchpfad für die Startdateien es wird sie finden - aber sie beeinflussen nichts anderes.In meinem Fall war das spezifische Verzeichnis, in das sie gestellt werden sollten
lib/gcc/x86_64-unknown-linux-gnu/4.3.2/
; Sie können die richtige finden, da sie bereits andere Dateien enthältcrtbegin.o
.quelle
Ich habe GCC 4.1.2 auf Ubuntu präzise x86_64 erstellt. Wie Sie habe ich mir die Liste des letzten Befehls "xgcc" angesehen und nach 32-Bit-c-Laufzeit, grep-ped / 32 /, gesucht. Die C-Laufzeit in meiner ist in / usr / lib32, die vom Paket libc6-dev-i386 bereitgestellt wird.
Also habe ich die crt? .O-Symlinks in dem Verzeichnis erstellt, nach dem xgcc gesucht hat.
Ich habe damit erfolgreich GCC 4.1.2 erstellt.
quelle