Estaciones de trabajo en línea OnWorks Linux y Windows

Logotipo

Alojamiento gratuito en línea para estaciones de trabajo

<Anterior | Contenido | Siguiente>

6.21.1. Instalación de GCC

Si se basa en x86_64, cambie el nombre del directorio predeterminado para las bibliotecas de 64 bits a "lib":


caso $ (uname -m) en x86_64)

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

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

;;

esac

caso $ (uname -m) en x86_64)

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

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

;;

esac


La documentación de GCC recomienda compilar GCC en un directorio de compilación dedicado:


mkdir -v construir cd construir

mkdir -v construir cd construir


Prepare GCC para la compilación:


SED = sed \

../configure --prefix = / usr \

--enable-languages ​​= c, c ++ \

--disable-multilib\

--disable-arranque \

--con-sistema-zlib

SED = sed \

../configure --prefix = / usr \

--enable-languages ​​= c, c ++ \

--disable-multilib\

--disable-arranque \

--con-sistema-zlib


Tenga en cuenta que para otros idiomas, existen algunos requisitos previos que aún no están disponibles. Consulte el Libro BLFS para obtener instrucciones sobre cómo crear todos los idiomas admitidos por GCC.

El significado de los nuevos parámetros de configuración:


SED = sed

Establecer esta variable de entorno evita una ruta codificada de forma rígida a / tools / bin / sed.

--con-sistema-zlib

Este interruptor le dice a GCC que se vincule a la copia instalada en el sistema de la biblioteca Zlib, en lugar de a su propia copia interna.

imagen

Compila el paquete:


“piensen de nuevo sobre los incrementos de precio”

“piensen de nuevo sobre los incrementos de precio”


Importante:

En esta sección, el conjunto de pruebas para GCC se considera fundamental. No lo omita bajo ninguna circunstancia.

Importante:

En esta sección, el conjunto de pruebas para GCC se considera fundamental. No lo omita bajo ninguna circunstancia.


Se sabe que un conjunto de pruebas en el conjunto de pruebas de GCC agota la pila, así que aumente el tamaño de la pila antes de ejecutar las pruebas:


ulimit-s 32768

ulimit-s 32768


Pruebe los resultados como usuario sin privilegios, pero no se detenga ante los errores:


chown -Rv nadie.

su nadie -s / bin / bash -c "RUTA = $ RUTA make -k check"

chown -Rv nadie.

su nadie -s / bin / bash -c "RUTA = $ RUTA make -k check"


Para recibir un resumen de los resultados de la suite de pruebas, ejecute:


../contrib/test_summary

../contrib/test_summary


Solo para los resúmenes, canalice la salida a través de grep -A7 suma.

Los resultados se pueden comparar con los que se encuentran en http://www.linuxfromscratch.org/lfs/build-logs/9.0/ y https: //gcc.gnu. org / ml / gcc-testresults /.

Se sabe que fallan seis pruebas relacionadas con get_time. Estos aparentemente están relacionados con la configuración regional en_HK.

Se sabe que dos pruebas llamadas lookup.cc y reverse.cc en experimental / net fallan en el entorno chroot LFS porque requieren / etc / hosts e iana-etc.

Se sabe que dos pruebas denominadas pr57193.cy pr90178.c fallan.

No siempre se pueden evitar algunos fallos inesperados. Los desarrolladores de GCC suelen estar al tanto de estos problemas, pero aún no los han resuelto. A menos que los resultados de la prueba sean muy diferentes de los de la URL anterior, es seguro continuar.

Instale el paquete y elimine un directorio innecesario:


make install

rm -rf / usr / lib / gcc / $ (gcc -dumpmachine) /9.2.0/include-fixed/bits/

make install

rm -rf / usr / lib / gcc / $ (gcc -dumpmachine) /9.2.0/include-fixed/bits/


El directorio de compilación de GCC es propiedad de nadie ahora y la propiedad del directorio de encabezado instalado (y su contenido) será incorrecta. Cambiar la propiedad a raíz usuario y grupo:


chown -v -R root: root \

/usr/lib/gcc/*linux-gnu/9.2.0/include{,-arreglado}

chown -v -R root: root \

/usr/lib/gcc/*linux-gnu/9.2.0/include{,-arreglado}


Cree un enlace simbólico requerido por la FHS por razones "históricas".


ln -sv ../usr/bin/cpp / lib

ln -sv ../usr/bin/cpp / lib


Muchos paquetes usan el nombre cc para llamar al compilador de C. Para satisfacer esos paquetes, cree un enlace simbólico:


ln -sv gcc / usr / bin / cc

ln -sv gcc / usr / bin / cc


Agregue un enlace simbólico de compatibilidad para habilitar la creación de programas con Optimización de tiempo de enlace (LTO):


instalar -v -dm755 / usr / lib / bfd-plugins

ln -sfv ../../libexec/gcc/$(gcc -dumpmachine) /9.2.0/liblto_plugin.so \

/ usr / lib / bfd-plugins /

instalar -v -dm755 / usr / lib / bfd-plugins

ln -sfv ../../libexec/gcc/$(gcc -dumpmachine) /9.2.0/liblto_plugin.so \

/ usr / lib / bfd-plugins /


Ahora que nuestra cadena de herramientas final está en su lugar, es importante asegurarse nuevamente de que la compilación y la vinculación funcionen como se espera. Hacemos esto realizando las mismas comprobaciones de cordura que hicimos anteriormente en el capítulo:


echo 'int main () {}'> dummy.c

cc dummy.c -v -Wl, - detallado &> dummy.log readelf -l a.out | grep ': / lib'

echo 'int main () {}'> dummy.c

cc dummy.c -v -Wl, - detallado &> dummy.log readelf -l a.out | grep ': / lib'

No debería haber errores, y el resultado del último comando será (permitiendo diferencias específicas de la plataforma en el nombre del enlazador dinámico):


[Solicita el intérprete del programa: /lib64/ld-linux-x86-64.so.2]

[Solicita el intérprete del programa: /lib64/ld-linux-x86-64.so.2]

Ahora asegúrese de que estemos configurados para usar los archivos de inicio correctos:


grep -o '/usr/lib.*/crt[1in].*succeeded' dummy.log

grep -o '/usr/lib.*/crt[1in].*succeeded' dummy.log

La salida del último comando debería ser:


/usr/lib/gcc/x86_64-pc-linux-gnu/9.2.0/../../../../lib/crt1.o tuvo éxito

/usr/lib/gcc/x86_64-pc-linux-gnu/9.2.0/../../../../lib/crti.o tuvo éxito

/usr/lib/gcc/x86_64-pc-linux-gnu/9.2.0/../../../../lib/crtn.o tuvo éxito

/usr/lib/gcc/x86_64-pc-linux-gnu/9.2.0/../../../../lib/crt1.o tuvo éxito

/usr/lib/gcc/x86_64-pc-linux-gnu/9.2.0/../../../../lib/crti.o tuvo éxito

/usr/lib/gcc/x86_64-pc-linux-gnu/9.2.0/../../../../lib/crtn.o tuvo éxito

Dependiendo de la arquitectura de su máquina, lo anterior puede diferir ligeramente, la diferencia suele ser el nombre del directorio después / usr / lib / gcc. Lo importante a buscar aquí es que gcc ha encontrado los tres crt * .o archivos bajo el / Usr / lib directorio.

Verifique que el compilador esté buscando los archivos de encabezado correctos:


grep -B4 '^ / usr / include' dummy.log

grep -B4 '^ / usr / include' dummy.log

Este comando debería devolver el siguiente resultado:


#include <...> la búsqueda comienza aquí:

/usr/lib/gcc/x86_64-pc-linux-gnu/9.2.0/incluir

/ usr / local / include

/usr/lib/gcc/x86_64-pc-linux-gnu/9.2.0/include-fixed

/ usr / include

#include <...> la búsqueda comienza aquí:

/usr/lib/gcc/x86_64-pc-linux-gnu/9.2.0/incluir

/ usr / local / include

/usr/lib/gcc/x86_64-pc-linux-gnu/9.2.0/include-fixed

/ usr / include

Nuevamente, tenga en cuenta que el directorio que lleva el nombre de su triplete de destino puede ser diferente al anterior, dependiendo de su arquitectura.

A continuación, verifique que el nuevo vinculador se esté utilizando con las rutas de búsqueda correctas:


grep 'SEARCH. * / usr / lib' dummy.log | sed 's |; | \ n | g '

grep 'SEARCH. * / usr / lib' dummy.log | sed 's |; | \ n | g '

Las referencias a rutas que tienen componentes con '-linux-gnu' deben ignorarse, pero de lo contrario, la salida del último comando debe ser:


SEARCH_DIR("/usr/x86_64-pc-linux-gnu/lib64") SEARCH_DIR("/usr/local/lib64") SEARCH_DIR("/lib64")

SEARCH_DIR ("/ usr / lib64") SEARCH_DIR ("/ usr / x86_64-pc-linux-gnu / lib") SEARCH_DIR ("/ usr / local / lib") SEARCH_DIR ("/ lib")

SEARCH_DIR ("/ usr / lib");

SEARCH_DIR("/usr/x86_64-pc-linux-gnu/lib64") SEARCH_DIR("/usr/local/lib64") SEARCH_DIR("/lib64")

SEARCH_DIR ("/ usr / lib64") SEARCH_DIR ("/ usr / x86_64-pc-linux-gnu / lib") SEARCH_DIR ("/ usr / local / lib") SEARCH_DIR ("/ lib")

SEARCH_DIR ("/ usr / lib");


Un sistema de 32 bits puede ver algunos directorios diferentes. Por ejemplo, aquí está el resultado de una máquina i686:


SEARCH_DIR ("/ usr / i686-pc-linux-gnu / lib32") SEARCH_DIR ("/ usr / local / lib32") SEARCH_DIR ("/ lib32")

SEARCH_DIR ("/ usr / lib32") SEARCH_DIR ("/ usr / i686-pc-linux-gnu / lib") SEARCH_DIR ("/ usr / local / lib") SEARCH_DIR ("/ lib")

SEARCH_DIR ("/ usr / lib");

SEARCH_DIR ("/ usr / i686-pc-linux-gnu / lib32") SEARCH_DIR ("/ usr / local / lib32") SEARCH_DIR ("/ lib32")

SEARCH_DIR ("/ usr / lib32") SEARCH_DIR ("/ usr / i686-pc-linux-gnu / lib") SEARCH_DIR ("/ usr / local / lib") SEARCH_DIR ("/ lib")

SEARCH_DIR ("/ usr / lib");

A continuación, asegúrese de que estamos usando la libc correcta:


grep "/lib.*/libc.so.6" dummy.log

grep "/lib.*/libc.so.6" dummy.log

La salida del último comando debería ser:


intento de abrir /lib/libc.so.6 exitoso

intento de abrir /lib/libc.so.6 exitoso

Por último, asegúrese de que GCC esté utilizando el vinculador dinámico correcto:


grep encontrado dummy.log

grep encontrado dummy.log

La salida del último comando debe ser (teniendo en cuenta las diferencias específicas de la plataforma en el nombre del enlazador dinámico):


encontrado ld-linux-x86-64.so.2 en /lib/ld-linux-x86-64.so.2

encontrado ld-linux-x86-64.so.2 en /lib/ld-linux-x86-64.so.2

Si la salida no aparece como se muestra arriba o no se recibe en absoluto, entonces algo está muy mal. Investigue y vuelva sobre los pasos para averiguar dónde está el problema y corregirlo. La razón más probable es que algo salió mal con el ajuste del archivo de especificaciones. Cualquier problema deberá resolverse antes de continuar con el proceso.

Una vez que todo funcione correctamente, limpie los archivos de prueba:


rm -v dummy.c a.out dummy.log

rm -v dummy.c a.out dummy.log

Finalmente, mueva un archivo extraviado:


mkdir -pv / usr / share / gdb / auto-load / usr / lib

mv -v /usr/lib/*gdb.py / usr / share / gdb / auto-load / usr / lib

mkdir -pv / usr / share / gdb / auto-load / usr / lib

mv -v /usr/lib/*gdb.py / usr / share / gdb / auto-load / usr / lib


Top OS Cloud Computing en OnWorks: