Also möchte ich ein Betriebssystem machen. Dieses Mal kommen wir zu einem GCC-Cross-Compiler.
Installieren Sie zunächst die Abhängigkeiten.
Was Sie brauchen ist:
Sie können Curl verwenden, wie Sie möchten, z. B. wget.
$ sudo apt update
$ sudo apt -y install curl build-essential m4 libgmp3-dev libmpc-dev libmpfr-dev qemu qemu-kvm
Machen Sie zuerst gmp. Es ist auf "--prefix = / usr / local / cc" gesetzt, aber Sie können es verwenden, wie Sie möchten. Ich denke jedoch, dass es besser ist, den durch dieses --prefix
angegebenen Wert gmp, mpfr, mpc und binutils gemeinsam zu machen.
Zuerst von gmp.
gmp
$ curl --output gmp-6.2.0.tar.bz2 https://ftp.gnu.org/gnu/gmp/gmp-6.2.0.tar.bz2
$ tar -xvf gmp-6.2.0.tar.bz2
$ cd gmp-6.2.0
$ ./configure --prefix=/usr/local/cc
$ make check && sudo make install
$ cd ..
Als nächstes machen Sie in der Reihenfolge von mpfr, mpc, binutils.
mpfr
$ curl --output mpfr-4.1.0.tar.bz2 https://ftp.gnu.org/gnu/mpfr/mpfr-4.1.0.tar.bz2
$ tar -xvf mpfr-4.1.0.tar.bz2
$ cd mpfr-4.1.0
$ ./configure --prefix=/usr/local/cc
$ make check && sudo make install
$ cd ..
mpc
$ curl --output mpc-1.2.0.tar.gz https://ftp.gnu.org/gnu/mpc/mpc-1.2.0.tar.gz
$ tar -xvf mpc-1.2.0.tar.gz
$ cd mpc-1.2.0
$ ./configure --prefix=/usr/local/cc
$ make check && sudo make install
$ cd ..
binutils
$ curl --output binutils-2.35.tar.xz https://ftp.gnu.org/gnu/binutils/binutils-2.35.tar.xz
$ tar -xvf binutils-2.35.tar.xz
$ cd binutils-2.35
$ ./configure --target=x86_64-elf --prefix=/usr/local/cc --disable-nls
$ make
$ make install
$ cd ..
Nun, endlich GCC machen.
Hier sind einige Einschränkungen.
Das erste ist, dass Sie in das gcc-Quellcode-Verzeichnis gehen und nicht ** . / Configure
**. Wenn Sie das tun, können Sie make all-target-libgcc
verwenden.
Das zweite ist das Konfigurationsargument "--with-xxx". Geben Sie dazu das im vorherigen Schritt durch --prefix
von gmp, mpfr, mpc angegebene Verzeichnis an.
Das dritte ist das Argument "--with-as". Dies erfordert im Gegensatz zu anderen, dass Sie den ** Ausführungsbinärpfad ** direkt angeben.
gcc machen
$ curl --output gcc-10.2.0.tar.xz https://ftp.gnu.org/gnu/gcc/gcc-10.2.0/gcc-10.2.0.tar.xz
$ tar -xvf gcc-10.2.0.tar.xz
$ mkdir gcc-make-tmp
$ cd gcc-make-tmp
$ ../gcc-10.2.0/configure\
--target=x86_64-elf\
--prefix=/usr/local/cc\
--disable-nls\
--enable-languages=c\
--without-headers\
--with-gmp=/usr/local/cc\
--with-mpfr=/usr/local/cc\
--with-mpc=/usr/local/cc\
--with-as=/usr/local/cc/bin/x86_64-elf-as #Geben Sie den Binärpfad des Befehls as an
#Sie können ohne dies krank werden(stdio.h: no such file or directory.)
#Fügen Sie hinzu, wenn Sie können
# --with-headers=/usr/include\
# --with-headers=/usr/include/x86_64-linux-gnu
$ #Es dauert sehr lange, also machen wir eine Teepause, während wir diesen Befehl ausführen.
$ make all-gcc && make install-gcc
$ make all-target-libgcc && make install-target-libgcc
$ export PATH=/usr/local/cc/bin:$PATH
$ x86_64-elf-gcc -v
Using built-in specs.
COLLECT_GCC=x86_64-elf-gcc
COLLECT_LTO_WRAPPER=/mnt/d/usr/local/cc/libexec/gcc/x86_64-elf/10.2.0/lto-wrapper
Target: x86_64-elf
Configured with: (Kürzung)
Thread model: single
Supported LTO compression algorithms: zlib
gcc version 10.2.0 (GCC)
Wenn eine solche Ausgabe erfolgt, ist sie erfolgreich. Danke für deine harte Arbeit.
Ich hatte es schwer, weil es wenig Informationen gab. Besonders die letzte gcc-Marke war hart.
** Binutils aus der Quelle erstellen. ** ** **
Recommended Posts