Alors, j'aimerais faire un OS. Cette fois, arrivons au point d'obtenir un compilateur croisé GCC.
Tout d'abord, installez les dépendances.
Ce dont vous avez besoin est:
Vous pouvez utiliser curl comme vous le souhaitez, comme wget.
$ sudo apt update
$ sudo apt -y install curl build-essential m4 libgmp3-dev libmpc-dev libmpfr-dev qemu qemu-kvm
Commencez par créer gmp. Il est défini sur --prefix = / usr / local / cc
, mais vous pouvez l'utiliser comme vous le souhaitez. Cependant, je pense qu'il est préférable de rendre la valeur spécifiée par ce --prefix
commune à gmp, mpfr, mpc et binutils.
D'abord de 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 ..
Ensuite, faites dans l'ordre 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 ..
Eh bien, enfin GCC faire.
Voici quelques mises en garde.
La première est que vous devez aller dans le répertoire du code source gcc et ne pas faire ** . / Configure
**. Si vous faites cela, vous pouvez utiliser make all-target-libgcc
.
Le second est l'argument de configuration --with-xxx
. Pour cela, spécifiez le répertoire spécifié par --prefix
de gmp, mpfr, mpc à l'étape précédente, respectivement.
Le troisième est l'argument «--with-as». Ceci, contrairement à d'autres, vous oblige à spécifier directement le ** chemin binaire d'exécution **.
gcc faire
$ 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 #Spécifiez le chemin binaire de la commande as
#Vous pourriez tomber malade sans ça(stdio.h: no such file or directory.)
#Ajoutez si vous le pouvez
# --with-headers=/usr/include\
# --with-headers=/usr/include/x86_64-linux-gnu
$ #Cela prend beaucoup de temps, alors prenons une pause thé tout en exécutant cette commande.
$ 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: (réduction)
Thread model: single
Supported LTO compression algorithms: zlib
gcc version 10.2.0 (GCC)
Si une telle sortie est effectuée, elle réussit. Je vous remercie pour votre travail acharné.
J'ai eu du mal car il y avait peu d'informations. Surtout, la dernière marque gcc a été difficile.
** Construisez des binutils à partir des sources. ** **
Recommended Posts