crti.o kann nicht gefunden werden: Keine solche Datei oder kein solches Verzeichnis

19

Wenn ich gcc 4.1.2 ( ftp://ftp.mirrorservice.org/sites/sourceware.org/pub/gcc/releases/gcc-4.1.2/gcc-4.1.2.tar.bz2 ) auf meinem machen möchte Ubuntu 12.04 (x86_64). Der aktuell aktive gcc ist 4.6.2. Ich tat:

./configure

dann

make

Allerdings bekomme ich diesen Fehler

/usr/bin/ld: cannot find crti.o: No such file or directory
collect2: ld returned 1 exit status

Beim Durchsuchen des Webs scheint es ein Problem mit dem Standort von zu geben crti. Diese Dateien sind auf dem System verfügbar

# find /usr/ -name crti*
/usr/lib32/crti.o
/usr/lib/x86_64-linux-gnu/crti.o
/usr/lib/debug/usr/lib/x86_64-linux-gnu/crti.o

Auch das libc6-Entwicklungspaket ist installiert

# dpkg -l | grep libc6
ii  libc6                                  2.15-0ubuntu10.3                          Embedded GNU C Library: Shared libraries
ii  libc6-dbg                              2.15-0ubuntu10.3                        Embedded GNU C Library: detached debugging symbols
ii  libc6-dev                              2.15-0ubuntu10.3                        Embedded GNU C Library: Development Libraries and Header Files
ii  libc6-dev-i386                         2.15-0ubuntu10.3                        Embedded GNU C Library: 32-bit development libraries for AMD64
ii  libc6-i386                             2.15-0ubuntu10.3                        Embedded GNU C Library: 32-bit shared libraries for AMD64
ii  libc6-pic                              2.15-0ubuntu10.3                        Embedded GNU C Library: PIC archive library

Wie kann ich das beheben?

AKTUALISIEREN:

Nach dem Hinzufügen dieser

LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LIBRARY_PATH 
export LIBRARY_PATH 

Dieses Problem ist gelöst. Aber jetzt verstehe ich

/usr/bin/ld: skipping incompatible /usr/lib/x86_64-linux-gnu/libc.so when searching for -lc
/usr/bin/ld: skipping incompatible /usr/lib/x86_64-linux-gnu/libc.a when searching for -lc
/usr/bin/ld: i386:x86-64 architecture of input file `/usr/lib/x86_64-linux-gnu/crti.o' is incompatible with i386 output
/usr/bin/ld: i386:x86-64 architecture of input file `/usr/lib/x86_64-linux-   gnu/crtn.o' is incompatible with i386 output
collect2: ld returned 1 exit status
mahmood
quelle
Ich erhalte andere Fehler, etwa makeinfonicht vorhanden ist , das ist auf meinem System. Mit diesen Schritten können Sie Ihren Fehler nicht beheben.
Gertvdijk

Antworten:

13

Dies ist ein BUG , der im Launchpad gemeldet wurde, wenn es eine Problemumgehung gibt:

Kompilieren eines 64-Bit-Programms auf einer 32-Bit-Plattform:

LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LIBRARY_PATH 
export LIBRARY_PATH

für 32 Bit native:

LIBRARY_PATH=/usr/lib32:$LIBRARY_PATH
export LIBRARY_PATH

Dies in Ihrer .bashrc-Datei (oder über eine Konsole ausgeführt) reicht aus, damit GCC den neuen Speicherort der Bibliothek findet.

Danke. nach Iain Buclaw (ibuclaw), um in die richtige Richtung zu weisen.

12.10 32 Bit

hhlp@hhlp:~$ sudo find /usr/ -name crti*
/usr/lib/i386-linux-gnu/crti.o
hhlp@hhlp:~$ 

LIBRARY_PATH=/usr/lib/i386-linux-gnu:$LIBRARY_PATH 
export LIBRARY_PATH

12.10 64 Bit

hhlp@hhlp:~$ sudo find /usr/ -name crti*
/usr/lib/x86_64-linux-gnu/crti.o
hhlp@hhlp:~$ 

LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LIBRARY_PATH 
export LIBRARY_PATH
hhlp
quelle
Dieses Problem ist gelöst. Allerdings bekomme ich neuen Fehler. Bitte sehen Sie sich das Original an
mahmood
2
Danke, aber das war nicht die Lösung für das zweite Problem. Ich stellte fest, dass ich ./configure --disable-multilibgemäß gcc.gnu.org/ml/gcc-help/2009-05/msg00238.html von Grund auf neu erstellen musste. Vielen Dank für Ihre Hilfe
mahmood
Funktioniert nicht mit Ubuntu 16.04 und meinem Build.
Niklas
Ich stehe vor dem gleichen Problem, aber beim Laufen make installals letzter Schritt. Ich habe LIBRARY_PATH gesetzt, aber ohne Erfolg !! Jede Hilfe dankbar
faizan
1
Nachdem ich das benutzt hatte, hatte ich das Problem "Das aktuelle Verzeichnis sollte nicht in LIBRARY_PATH sein", das durch ein zuvor leeres LIBRARY_PATH verursacht wurde. Verwenden export LIBRARY_PATH="/usr/lib/x86_64-linux-gnu${LIBRARY_PATH+:$LIBRARY_PATH}"Sie daher oder (wenn Sie wissen, dass es leer ist)export LIBRARY_PATH=/usr/lib/x86_64-linux-gnu
Flamefire
1

In meinem Fall habe Ubuntu 16.04ich überhaupt keine crti.o:

$ find /usr/ -name crti*

Also installiere ich das Entwicklerpaket:

sudo apt-get install libc6-dev
Eugen Konkov
quelle
0

Wenn Sie GCC 4.8 auf x86-64 aus Upstream-Quellen erstellen, besteht das Problem, dass Sie sowohl 32- als auch 64-Bit-Bibliotheken erstellen müssen (es sei denn, multi-lib ist deaktiviert). In diesem Fall müssen Sie beide Pfade /usr/lib/x86_64-linux-gnuund hinzufügen /usr/lib32.

John Vreeland
quelle
Standardmäßig ja. Sie können den Build jedoch mit der Option --with-multilib-list = m64 für ./configure auf nur 64-Bit beschränken. Es funktionierte für mich, als ich GCC 4.8.5 baute. Ich habe es auch in meiner Antwort (Teil 3) auf stackoverflow.com/a/55703805/4807875 erwähnt .
Alexander Samoylov
0

Ich baue auch eine ältere Version von gcc auf meinem Ubuntu-Rechner (3.4.6 auf einem 4.6.3-Rechner).
Ich habe @ mahmoods --disable-multilib-Lösung ausprobiert, aber dann schien das Paket, das ich brauchte, um gcc 3.4.6 zu verwenden, auch auch die 32-Bit-Bibliothek benötigen.

Daher habe ich der LIBRARY_PATH sowohl die 64-Bit- als auch die 32-Bit-Bibliothek hinzugefügt

LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:/usr/lib32:$LIBRARY_PATH 
export LIBRARY_PATH 

Oh und ich bin auf Ubuntu 12.04 64bit

Herzstück
quelle
1
Um mit älteren gcc / g ++ arbeiten zu können, müssen Sie Ubuntu vergessen, da Sie in einer neueren Version von Ubuntu das Problem nicht vollständig beheben können und ein älteres Ubuntu dagegen nicht mehr unterstützt wird. Sie müssen rehdat-basierte Systeme verwenden. Centos 6.3 ist in
Ordnung