3 Stimmen

Cross Compile Kann crt1.o nicht finden

Hi, ich erstelle Linux from Scratch (www.linuxfromscratch.org) und bin an einem Schritt, der erfordert, dass ich ein Test-C-Programm kompiliere, um zu sehen, ob die Kompilierung funktioniert, und sie scheitert.
Die Befehle, die ich verwende, sind:

echo "main(){}" > dummy.c
$LFS_TGT-gcc -B/tools/lib dummy.c
readelf -l a.out | grep ': /tools'

Wenn ich die zweite Zeile ausführe, gibt der Compiler folgendes zurück.

..pfad../bin/ld: kann crt1.o nicht finden: Datei oder Verzeichnis nicht gefunden
..pfad../bin/ld: kann crti.o nicht finden: Datei oder Verzeichnis nicht gefunden
..pfad../bin/ld: kann -lc nicht finden
..pfad../bin/ld: kann crtn.o nicht finden: Datei oder Verzeichnis nicht gefunden
collect2: ld gab Status 1 zurück

Ich bin mir nicht sicher, was das Problem hier ist und wie man es beheben kann,
Bisher habe ich das gcc-Paket sowie die Specs-Datei neu installiert.

Die Ausgabe von $LFS_TGT-gcc -v -B/tools/lib dummy.c ist:

Spezifikationen werden aus /mnt/lfs/tools/bin/../lib/gcc/x86_64-lfs-linux-gnu/4.6.1/specs gelesen
COLLECT_GCC=x86_64-lfs-linux-gnu-gcc
COLLECT_LTO_WRAPPER=/mnt/lfs/tools/bin/../libexec/gcc/x86_64-lfs-linux-gnu/4.6.1/lto-wrapper
Ziel: x86_64-lfs-linux-gnu
Konfiguriert mit: ../gcc-4.6.1/configure --target=x86_64-lfs-linux-gnu --prefix=/tools --disable-nls --disable-shared --disable-multilib --disable-decimal-float --disable-threads --disable-libmudflap --disable-libssp --disable-libgomp --disable-libquadmath --disable-target-libiberty --disable-target-zlib --enable-languages=c --without-pppl --without-cloog --with-mpfr-include=/mnt/lfs/sources/gcc-4.6.1/mpfr/src --with-mpfr-lib=/mnt/lfs/sources/gcc-build/mpfr/src/.libs
Thread-Modell: single
gcc-Version 4.6.1 (GCC) 
COLLECT_GCC_OPTIONS='-v' '-B' '/tools/lib' '-mtune=generic' '-march=x86-64'
 /mnt/lfs/tools/bin/../libexec/gcc/x86_64-lfs-linux-gnu/4.6.1/cc1 -leise -v -iprefix /mnt/lfs/tools/bin/../lib/gcc/x86_64-lfs-linux-gnu/4.6.1/ -isystem /tools/include dummy.c leise -dumpbase dummy.c -mtune=generic -march=x86-64 -auxbase dummy -version -o /tmp/ccQMiBtT.s
GNU C (GCC) Version 4.6.1 (x86_64-lfs-linux-gnu)
    kompiliert von GNU C Version 4.5.2, GMP Version 5.0.2, MPFR Version 3.1.0, MPC Version 0.9
GGC-Heuristiken: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
ignoriert nicht vorhandenes Verzeichnis "/mnt/lfs/tools/bin/../lib/gcc/x86_64-lfs-linux-gnu/4.6.1/../../../../x86_64-lfs-linux-gnu/sys-include"
ignoriert nicht vorhandenes Verzeichnis "/mnt/lfs/tools/bin/../lib/gcc/x86_64-lfs-linux-gnu/4.6.1/../../../../x86_64-lfs-linux-gnu/include"
ignoriert dupliziertes Verzeichnis "/mnt/lfs/tools/bin/../lib/gcc/../../lib/gcc/x86_64-lfs-linux-gnu/4.6.1/include"
ignoriert dupliziertes Verzeichnis "/mnt/lfs/tools/bin/../lib/gcc/../../lib/gcc/x86_64-lfs-linux-gnu/4.6.1/include-fixed"
ignoriert nicht vorhandenes Verzeichnis "/mnt/lfs/tools/bin/../lib/gcc/../../lib/gcc/x86_64-lfs-linux-gnu/4.6.1/../../../../x86_64-lfs-linux-gnu/sys-include"
ignoriert nicht vorhandenes Verzeichnis "/mnt/lfs/tools/bin/../lib/gcc/../../lib/gcc/x86_64-lfs-linux-gnu/4.6.1/../../../../x86_64-lfs-linux-gnu/include"
#include "..." Suche beginnt hier:
#include <...> Suche beginnt hier:
 /tools/include
 /mnt/lfs/tools/bin/../lib/gcc/x86_64-lfs-linux-gnu/4.6.1/include
 /mnt/lfs/tools/bin/../lib/gcc/x86_64-lfs-linux-gnu/4.6.1/include-fixed
Ende der Suchliste.
GNU C (GCC) Version 4.6.1 (x86_64-lfs-linux-gnu)
    kompiliert von GNU C Version 4.5.2, GMP Version 5.0.2, MPFR Version 3.1.0, MPC Version 0.9
GGC-Heuristiken: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler-Ausführbarkeitsprüfsumme: ac76a9fc3d8568635f4cf190a73f3235
COLLECT_GCC_OPTIONS='-v' '-B' '/tools/lib' '-mtune=generic' '-march=x86-64'
 /mnt/lfs/tools/bin/../lib/gcc/x86_64-lfs-linux-gnu/4.6.1/../../../../x86_64-lfs-linux-gnu/bin/as --64 -o /tmp/ccjUV0Gs.o /tmp/ccQMiBtT.s
COMPILER_PATH=/tools/lib/:/mnt/lfs/tools/bin/../libexec/gcc/x86_64-lfs-linux-gnu/4.6.1/:/mnt/lfs/tools/bin/../libexec/gcc/:/mnt/lfs/tools/bin/../lib/gcc/x86_64-lfs-linux-gnu/4.6.1/../../../../x86_64-lfs-linux-gnu/bin/
LIBRARY_PATH=/tools/lib/:/mnt/lfs/tools/bin/../lib/gcc/x86_64-lfs-linux-gnu/4.6.1/:/mnt/lfs/tools/bin/../lib/gcc/:/mnt/lfs/tools/bin/../lib/gcc/x86_64-lfs-linux-gnu/4.6.1/../../../../x86_64-lfs-linux-gnu/lib/
COLLECT_GCC_OPTIONS='-v' '-B' '/tools/lib' '-mtune=generic' '-march=x86-64'
 /mnt/lfs/tools/bin/../libexec/gcc/x86_64-lfs-linux-gnu/4.6.1/collect2 --eh-frame-hdr -m elf_x86_64 -dynamic-linker /tools/lib64/ld-linux-x86-64.so.2 crt1.o crti.o /mnt/lfs/tools/bin/../lib/gcc/x86_64-lfs-linux-gnu/4.6.1/crtbegin.o -L/tools/lib -L/mnt/lfs/tools/bin/../lib/gcc/x86_64-lfs-linux-gnu/4.6.1 -L/mnt/lfs/tools/bin/../lib/gcc -L/mnt/lfs/tools/bin/../lib/gcc/x86_64-lfs-linux-gnu/4.6.1/../../../../x86_64-lfs-linux-gnu/lib /tmp/ccjUV0Gs.o -lgcc -lc -lgcc /mnt/lfs/tools/bin/../lib/gcc/x86_64-lfs-linux-gnu/4.6.1/crtend.o crtn.o
/mnt/lfs/tools/bin/../lib/gcc/x86_64-lfs-linux-gnu/4.6.1/../../../../x86_64-lfs-linux-gnu/bin/ld: kann crt1.o nicht finden: Datei oder Verzeichnis nicht gefunden
/mnt/lfs/tools/bin/../lib/gcc/x86_64-lfs-linux-gnu/4.6.1/../../../../x86_64-lfs-linux-gnu/bin/ld: kann crti.o nicht finden: Datei oder Verzeichnis nicht gefunden
/mnt/lfs/tools/bin/../lib/gcc/x86_64-lfs-linux-gnu/4.6.1/../../../../x86_64-lfs-linux-gnu/bin/ld: kann -lc nicht finden
/mnt/lfs/tools/bin/../lib/gcc/x86_64-lfs-linux-gnu/4.6.1/../../../../x86_64-lfs-linux-gnu/bin/ld: kann crtn.o nicht finden: Datei oder Verzeichnis nicht gefunden
collect2: ld gab Status 1 zurück

Es ist mir klar, dass es sehr lang ist, aber wenn jemand sagt, was relevant ist, werde ich es kürzen. Weil ganz ehrlich, ich weiß nicht, was nützlich ist.

7voto

chill Punkte 16115

Crt1.o, crti.o und crtn.o sowie libc.a werden alle mit Ihrer glibc mitgeliefert.

Sie müssen Ihre glibc für Ihr Zielsystem kompiliert und installiert haben, anscheinend in /tools/lib.

EDIT: Nicht unbedingt glibc, sondern jede beliebige libc, die Sie verwenden.

3voto

FractalSpace Punkte 5133

Wenn das Neukompilieren von gcc keine Option ist, weil es bereits mit Sysroot installiert ist, versuchen Sie dies:

`export CFLAGS="--sysroot="`

(Hinweis: libc.so.x befindet sich in /lib)

Dann bearbeiten Sie Ihre Makefile und ersetzen Sie alle

`CFLAGS=BLA-BLA`
`CPPFLAGS=BLA-BLA`

mit

CFLAGS+=BLA-BLA CPPFLAGS+=BLA-BLA

2voto

Geben Sie -v Ihrem $LFS_TGT-gcc ein, um zu verstehen, was passiert.

0voto

NEERAJ Punkte 1

Ich hatte mit folgendem Problem zu kämpfen:

root@gccc# arm-wrs-linux-gnueabi-gcc x.c
/opt/tools/wrl3.GA/wrlinux-3.0/layers/wrll-toolchain-4.3-85/arm/toolchain/x86-linux2/bin/../lib/gcc/arm-wrs-linux-gnueabi/4.3.2/../../../../arm-wrs-linux-gnueabi/bin/ld: crt1.o: Datei oder Verzeichnis nicht gefunden
collect2: ld hat 1 als exit-Status zurückgegeben
root@gccc# 

Als ich danach recherchierte, fand ich heraus, dass ich das sysroot nicht im richtigen Pfad finden konnte. Also habe ich das sysroot in der Befehlszeile spezifiziert und mein Problem wurde gelöst:

root@gccc# arm-wrs-linux-gnueabi-gcc x.c --sysroot=/opt/tools/wrl3.GA/sysroot.2011_05_31.18_29_24/arm11_le-glibc_small/sysroot/ -o exe

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X