OnWorks Linux- und Windows-Online-WorkStations

Logo

Kostenloses Online-Hosting für WorkStations

<Zurück | Inhalte | Weiter>

5.5.1. Installation von Cross GCC

Image

GCC erfordert jetzt die Pakete GMP, MPFR und MPC. Da diese Pakete möglicherweise nicht in Ihrer Host-Distribution enthalten sind, werden sie mit GCC erstellt. Entpacken Sie jedes Paket in das GCC-Quellverzeichnis und benennen Sie die resultierenden Verzeichnisse um, damit die GCC-Build-Prozeduren sie automatisch verwenden:


Note

Zu diesem Kapitel kommt es häufig zu Missverständnissen. Die Verfahren sind die gleichen wie in jedem anderen Kapitel, wie zuvor erläutert (Anweisungen zur Paketerstellung). Extrahieren Sie zunächst den gcc-Tarball aus dem Quellverzeichnis und wechseln Sie dann in das erstellte Verzeichnis. Erst dann sollten Sie mit den folgenden Anweisungen fortfahren.

Note

Zu diesem Kapitel kommt es häufig zu Missverständnissen. Die Verfahren sind die gleichen wie in jedem anderen Kapitel, wie zuvor erläutert (Anweisungen zur Paketerstellung). Extrahieren Sie zunächst den gcc-Tarball aus dem Quellverzeichnis und wechseln Sie dann in das erstellte Verzeichnis. Erst dann sollten Sie mit den folgenden Anweisungen fortfahren.


tar -xf ../mpfr-4.0.2.tar.xz mv -v mpfr-4.0.2 mpfr

tar -xf ../gmp-6.1.2.tar.xz mv -v gmp-6.1.2 gmp

tar -xf ../mpc-1.1.0.tar.gz mv -v mpc-1.1.0 mpc

tar -xf ../mpfr-4.0.2.tar.xz mv -v mpfr-4.0.2 mpfr

tar -xf ../gmp-6.1.2.tar.xz mv -v gmp-6.1.2 gmp

tar -xf ../mpc-1.1.0.tar.gz mv -v mpc-1.1.0 mpc

Image

in gcc/config/{linux,i386/linux{,64}}.h

in gcc/config/{linux,i386/linux{,64}}.h

$file{,.orig} 's@/lib\(64\)\?\(32\)\?/ld@/tools&@g' \

's@/usr@/tools@g' $file.orig > $file

$file{,.orig} 's@/lib\(64\)\?\(32\)\?/ld@/tools&@g' \

's@/usr@/tools@g' $file.orig > $file

Der folgende Befehl ändert den Speicherort des standardmäßigen dynamischen Linkers von GCC, um den in installierten zu verwenden /Werkzeuge. Es entfernt auch / usr / include aus GCCs Include-Suchpfad. Ausgabe:


für Datei tun

cp -uv sed -e

-e

für Datei tun

cp -uv sed -e

-e


echo '

#undef STANDARD_STARTFILE_PREFIX_1

#undef STANDARD_STARTFILE_PREFIX_2

#define STANDARD_STARTFILE_PREFIX_1 "/tools/lib/"

#define STANDARD_STARTFILE_PREFIX_2 ""' >> $file touch $file.orig

erledigt

echo '

#undef STANDARD_STARTFILE_PREFIX_1

#undef STANDARD_STARTFILE_PREFIX_2

#define STANDARD_STARTFILE_PREFIX_1 "/tools/lib/"

#define STANDARD_STARTFILE_PREFIX_2 ""' >> $file touch $file.orig

erledigt

Falls es schwierig erscheint, dem oben Gesagten zu folgen, lassen Sie es uns etwas aufschlüsseln. Zuerst kopieren wir die Dateien gcc/config/linux.h, gcc/config/i386/linux.h und gcc/config/i368/linux64.h in eine Datei mit demselben Namen, aber mit dem angehängten Suffix „.orig“. Dann stellt der erste sed-Ausdruck „/tools“ jeder Instanz von „/lib/ld“, „/lib64/ld“ oder „/lib32/ld“ voran, während der zweite hartcodierte Instanzen von „/usr“ ersetzt. Als nächstes fügen wir unsere Definitionsanweisungen hinzu, die das Standard-Startdateipräfix am Ende der Datei ändern. Beachten Sie, dass das abschließende „/“ in „/tools/lib/“ erforderlich ist. Schließlich verwenden wir aufnehmen um den Zeitstempel der kopierten Dateien zu aktualisieren. Bei Verwendung in Verbindung mit ZentralprozessorDies verhindert unerwartete Änderungen an den Originaldateien, falls die Befehle versehentlich zweimal ausgeführt werden.


Legen Sie abschließend auf x86_64-Hosts den Standardverzeichnisnamen für 64-Bit-Bibliotheken auf „lib“ fest:


Fall $(uname -m) in x86_64)

sed -e '/m64=/s/lib64/lib/' \

-i.orig gcc/config/i386/t-linux64

;;

esac

Fall $(uname -m) in x86_64)

sed -e '/m64=/s/lib64/lib/' \

-i.orig gcc/config/i386/t-linux64

;;

esac

Die GCC-Dokumentation empfiehlt, GCC in einem dedizierten Build-Verzeichnis zu erstellen:


mkdir -v build cd build

mkdir -v build cd build

Bereiten Sie GCC für die Kompilierung vor:


../konfigurieren \

--target=$LFS_TGT \

--prefix=/tools \

--with-glibc-version=2.11 \

--with-sysroot=$LFS \

--with-newlib \

--without-headers \

--with-local-prefix=/tools \

--with-native-system-header-dir=/tools/include \

--disable-nls \

--disable-shared \

--disable-multilib \

--disable-decimal-float \

--disable-threads \

--disable-libatomic \

--disable-libgomp \

--disable-libquadmath \

--disable-libssp \

--disable-libvtv \

--disable-libstdcxx \

--enable-sprachen=c,c++

../konfigurieren \

--target=$LFS_TGT \

--prefix=/tools \

--with-glibc-version=2.11 \

--with-sysroot=$LFS \

--with-newlib \

--without-headers \

--with-local-prefix=/tools \

--with-native-system-header-dir=/tools/include \

--disable-nls \

--disable-shared \

--disable-multilib \

--disable-decimal-float \

--disable-threads \

--disable-libatomic \

--disable-libgomp \

--disable-libquadmath \

--disable-libssp \

--disable-libvtv \

--disable-libstdcxx \

--enable-sprachen=c,c++

Die Bedeutung der Konfigurationsoptionen:


--with-newlib

Da noch keine funktionierende C-Bibliothek verfügbar ist, wird dadurch sichergestellt, dass die inhibitor_libc-Konstante beim Erstellen von libgcc definiert wird. Dies verhindert das Kompilieren von Code, der libc-Unterstützung erfordert.

--ohne-Header

Beim Erstellen eines vollständigen Cross-Compilers benötigt GCC Standard-Header, die mit dem Zielsystem kompatibel sind. Für unsere Zwecke werden diese Header nicht benötigt. Dieser Schalter verhindert, dass GCC nach ihnen sucht.

--with-local-prefix=/tools

Das lokale Präfix ist der Speicherort im System, an dem GCC nach lokal installierten Include-Dateien sucht. Der Standardwert ist / usr/local. Einstellung auf /Werkzeuge Hilft dabei, den Host-Standort beizubehalten Verzeichnis / usr / local außerhalb des Suchpfads dieses GCC.


--with-native-system-header-dir=/tools/include

Standardmäßig wird nach GCC gesucht / usr / include für Systemheader. In Verbindung mit dem Sysroot-Schalter würde dies normalerweise zu „ $LFS/usr/include. Die Header, die in den nächsten beiden Abschnitten installiert werden, gehen jedoch zu $LFS/tools/include. Dieser Schalter stellt sicher, dass gcc sie korrekt findet. Im zweiten Durchgang von GCC stellt derselbe Schalter sicher, dass keine Header vom Hostsystem gefunden werden.

--disable-shared

Dieser Schalter zwingt GCC dazu, seine internen Bibliotheken statisch zu verknüpfen. Wir tun dies, um mögliche Probleme mit dem Hostsystem zu vermeiden.

--disable-decimal-float, --disable-threads, --disable-libatomic, --disable-libgomp, --disable-libquadmath, --disable-libssp, --disable-libvtv, --disable-libstdcxx

Diese Schalter deaktivieren die Unterstützung für die dezimale Gleitkommaerweiterung, Threading, libatomic, libgomp,

libquadmath, libssp, libvtv bzw. die C++-Standardbibliothek. Diese Funktionen können beim Erstellen eines Cross-Compilers nicht kompiliert werden und sind für die Aufgabe der Cross-Kompilierung der temporären libc nicht erforderlich.

--disable-multilib

Auf x86_64 unterstützt LFS noch keine Multilib-Konfiguration. Dieser Schalter ist für x86 unbedenklich.

--enable-sprachen=c,c++

Diese Option stellt sicher, dass nur die C- und C++-Compiler erstellt werden. Dies sind die einzigen Sprachen, die jetzt benötigt werden.

Kompilieren Sie GCC, indem Sie Folgendes ausführen:


um

um

Die Kompilierung ist nun abgeschlossen. Zu diesem Zeitpunkt würde die Testsuite normalerweise ausgeführt, aber wie bereits erwähnt, ist das Testsuite-Framework noch nicht vorhanden. Die Vorteile der Durchführung der Tests sind zu diesem Zeitpunkt minimal, da die Programme aus diesem ersten Durchgang bald ersetzt werden.

Installieren Sie das Paket:


make install

make install

Top OS Cloud Computing bei OnWorks: