Explicación de la serie Linux: instale gcc 9.1.0 (C++ 17) en Ubuntu 18.04

1. Descargue el paquete de compresión fuente gcc 9.1.0

Dirección espejo nacional: https://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/gcc-9.1.0/
inserte la descripción de la imagen aquí

2. Descomprima el paquete

Coloque el paquete comprimido en un directorio (~/myproject/gcc en este ejemplo) y luego descomprímalo

sun@sun-pc:~/myproject/gcc$ tar -zxvf gcc-9.1.0.tar.gz
...
sun@sun-pc:~/myproject/gcc$ ls
gcc-9.1.0  gcc-9.1.0.tar.gz

3. Comprobar y configurar el entorno para la compilación del código fuente

Ejecutar la configuración integrada

sun@sun-pc:~/myproject/gcc$ mkdir build    #创建个目录专门用于存放编译文件等
sun@sun-pc:~/myproject/gcc$ cd build
sun@sun-pc:~/myproject/gcc/build$ ../gcc-9.1.0/configure
sun@sun-pc:~/myproject/gcc/build$ ls
config.log  config.status  Makefile  serdep.tmp  #成功后可以看到生成了Makefile文件

Nota: Si la ejecución de la configuración falla, el error es el siguiente

checking build system type... x86_64-pc-linux-gnu
...
configure: error: Building GCC requires GMP 4.2+, MPFR 2.4.0+ and MPC 0.8.0+.
Try the --with-gmp, --with-mpfr and/or --with-mpc options to specify
...

Indica que hay tres bibliotecas que no se pueden encontrar, a saber, GMP 4.2+, MPFR 2.4.0+ y MPC 0.8.0+
Ingrese al directorio del código fuente de gcc, use el script download_prerequisites para descargar e instalar la biblioteca que falta, de la siguiente manera :

sun@sun-pc:~/myproject/gcc/gcc-9.1.0$ ./contrib/download_prerequisites

Si el comando anterior download_prerequisites no se descarga debido a un tiempo de espera de la red, aquí hay dos soluciones:


Método 1: puede intentar cambiar la URL de download_prerequisites y luego volver a ejecutar download_prerequisites

#base_url='ftp://gcc.gnu.org/pub/gcc/infrastructure/'
base_url='http://mirror.linux-ia64.org/gnu/gcc/infrastructure/'

Método 2: visita directa del navegador http://mirror.linux-ia64.org/gnu/gcc/infrastructure/ para descargar gmp-6.1.0.tar.bz2, mpfr-3.1.4.tar.bz2, mpc-1.0. 3. tar.gz (otras versiones pueden ser más grandes que GMP 4.2+, MPFR 2.4.0+ y MPC 0.8.0+), luego descomprimir y vincular

sun@sun-pc:~/myproject/gcc/gcc-9.1.0$ tar -jxvf gmp-6.1.0.tar.bz2
sun@sun-pc:~/myproject/gcc/gcc-9.1.0$ tar -zxvf mpc-1.0.3.tar.gz
sun@sun-pc:~/myproject/gcc/gcc-9.1.0$ tar -jxvf mpfr-3.1.4.tar.bz2
sun@sun-pc:~/myproject/gcc/gcc-9.1.0$ ls
... gmp-6.1.0 mpc-1.0.3 mpfr-3.1.4 ...     #解压后生成的三个目录
sun@sun-pc:~/myproject/gcc/gcc-9.1.0$ ln -s gmp-6.1.0 gmp
sun@sun-pc:~/myproject/gcc/gcc-9.1.0$ ln -s mpc-1.0.3 mpc
sun@sun-pc:~/myproject/gcc/gcc-9.1.0$ ln -s mpfr-3.1.4 mpfr

5. Compilar el código fuente de gcc

sun@sun-pc:~/myproject/gcc/build$ make -j8

6. Instalar gcc

Use el siguiente comando para instalar, la ruta de instalación predeterminada del archivo ejecutable es /usr/local/bin/, la ruta de instalación predeterminada de la biblioteca es/usr/local/lib/

sun@sun-pc:~/myproject/gcc/build$ sudo make install

Consejos:
El nombre completo de usr: Unix System Resource

7. Use alternativas de actualización para administrar múltiples versiones locales de gcc y g ++

Si hay varias versiones de gcc localmente, puede considerar usar alternativas de actualización para la administración.
Lo siguiente solo explica el proceso de configuración de gcc, y luego recuerde configurar g ++ también

7.1 Comprobar qué programas gcc están instalados localmente

#查看gcc的可执行文件及库文件位置,可以看到有两处
sun@sun-pc:~$ whereis gcc
gcc: /usr/bin/gcc /usr/lib/gcc /usr/local/bin/gcc /usr/local/lib/gcc /usr/share/man/man1/gcc.1.gz
#/usr/bin/gcc是原先安装的7.5.0版本
sun@sun-pc:~$ ls -l /usr/bin/gcc
lrwxrwxrwx 1 root root 5 521  2019 /usr/bin/gcc -> gcc-7

#/usr/local/bin/gcc是本次安装的9.1.0版本
sun@sun-pc:~$ ls -l /usr/local/bin/gcc
-rwxr-xr-x 3 root root 7111040 821 14:33 /usr/local/bin/gcc

#使用gcc命令查看版本,可以看到是9.1.0,说明终端里执行的程序是/usr/local/bin下的gcc
sun@sun-pc:~$ gcc --version
gcc (GCC) 9.1.0
Copyright © 2019 Free Software Foundation, Inc.
本程序是自由软件;请参看源代码的版权声明。本软件没有任何担保;
包括没有适销性和某一专用目的下的适用性担保。

Pregunta: ¿Por qué el comando gcc se ejecuta de forma predeterminada /usr/local/bin/gcc en lugar de /usr/bin/gcc?
Respuesta: Mire la figura a continuación, en las variables de entorno de la terminal, /usr/local/bin está antes de /usr/bin, por lo que los programas en /usr/local/bin se ejecutan primero.
inserte la descripción de la imagen aquí

7.2 Instalar todas las versiones locales de gcc en update-alternatives

Primero cambie al usuario raíz y luego ejecute los siguientes comandos para configurar las dos versiones de gcc en la lista de alternativas de actualización.

1. 配置gcc 7.5.0到update-alternatives列表
root@sun-pc:~# update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 1
update-alternatives: 使用 /usr/bin/gcc-7 来在自动模式中提供 /usr/bin/gcc (gcc)

2. /usr/local/bin/gcc和gcc命令名字冲突,配置gcc 9.1.0之前先更改一下/usr/local/bin/gcc的名字
root@sun-pc:~# mv /usr/local/bin/gcc /usr/local/bin/gcc-9
root@sun-pc:~# update-alternatives --install /usr/bin/gcc gcc /usr/local/bin/gcc-9 2
update-alternatives: 使用 /usr/local/bin/gcc 来在自动模式中提供 /usr/bin/gcc (gcc)

En cuanto a cómo usarlo, consulte la explicación de la serie de Linux: alternativas de actualización de la herramienta de administración de versiones de software local , que no se detallará aquí.

La razón por la cual /usr/local/bin/gcc necesita ser renombrado:
Como se mencionó en 7.1 arriba, el gcc bajo /usr/local/bin se ejecutará primero. Si no se cambia el nombre, cuando se ingresa el comando gcc en el terminal, el sistema estará primero en /usr/local/ Si se encuentra gcc en bin/, entonces se ejecutará el gcc en esta ruta en lugar del enlace simbólico gcc en /usr/bin. Entonces actualizar alternativas no tiene sentido para reemplazar la ruta del enlace gcc.

Supongo que te gusta

Origin blog.csdn.net/In_engineer/article/details/126445658
Recomendado
Clasificación