Linux From Scrach (Parte 4 - Construyendo un sistema temporal 2)
Seguimos creando nuestra propia distribución GNU/Linux con LFS como he prometido, ya vamos avanzando poco a poco, y en este momento vamos a continuar con el siguiente paquete. El Libstdc++ en su versión 8.1.0.
Así que vamos allá.
Libstdc++
Libstdc ++ es la biblioteca estándar de C++. Es necesario para el correcto funcionamiento del compilador g++.
Tiempo aproximado de compilación:
0.4 SBU
Tamaño de disco requerido:
752 MB
mkdir -v build
cd buildPreparamos para la compilación:
../libstdc++-v3/configure \Una vez configurado, compilamos
--host=$LFS_TGT \
--prefix=/tools \
--disable-multilib \
--disable-nls \
--disable-libstdcxx-threads \
--disable-libstdcxx-pch \
--with-gxx-include-dir=/tools/$LFS_TGT/include/c++/8.1.0
makeY ahora lo instalamos.
make installUna vez instalado, y sin problemas...
Salimos hasta quedarnos en el directorio sources.
cd ../..
Binutils-2.30 - 2º paso
El paquete Binutils contiene un enlazador, un ensamblador y otras herramientas para manejar archivos de objetos.
Tiemo aproximado de compilación: 1.1 SBU
Tamaño de disco requerido: 574 MB
Tiemo aproximado de compilación: 1.1 SBU
Tamaño de disco requerido: 574 MB
cd binutils-2.30
Creamos un directorio build, como en el paso anterior de binutils, y entramos en él.
mkdir -v build
cd buildLo preparamos para compilación:
Compilamos:CC=$LFS_TGT-gcc \
AR=$LFS_TGT-ar \
RANLIB=$LFS_TGT-ranlib \
../configure \
--prefix=/tools \
--disable-nls \
--disable-werror \
--with-lib-path=/tools/lib \
--with-sysroot
makeInstalamos:
make installAhora preparamos el vinculador para la fase "reajuste" en el siguiente paso:
make -C ld cleanSalimos hasta quedarnos en el directorio sources.
make -C ld LIB_PATH=/usr/lib:/lib
cp -v ld/ld-new /tools/bin
cd ../..
GCC-8.1.0 - 2º Paso
El paquete GCC contiene la colección del compilador GNU, que incluye los compiladores C y C ++.
Tiempo aproximado de compilación:
11 SBU
Tamaño de disco requerido:
2.6 GB
Nuestra primera compilación de GCC ha instalado un par de encabezados internos del sistema. Normalmente,
uno de ellos, limits.h, incluirá a su vez el límite del sistema
correspondiente.h header, en este caso, /tools/include/limits.h. Sin
embargo, en el momento de la primera compilación de gcc
/tools/include/limits.h no existía, por lo que el encabezado interno que
GCC instaló es un archivo parcial e independiente y no incluye las
características extendidas del encabezado del sistema. Esto fue adecuado para construir la libc temporal, pero esta compilación de GCC requiere ahora el encabezado interno completo. Cree
una versión completa del encabezado interno usando un comando que sea
idéntico al que hace el sistema de compilación de GCC en circunstancias
normales:
cat gcc/limitx.h gcc/glimits.h gcc/limity.h > \
dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/include-fixed/limits.hUna vez más, cambie la ubicación del enlazador dinámico predeterminado de GCC para usar el que está instalado en / tools.
Si se basa en x86_64, cambie el nombre del directorio predeterminado para las bibliotecas de 64 bits a "lib":
case $(uname -m) in
x86_64)
sed -e '/m64=/s/lib64/lib/' \
-i.orig gcc/config/i386/t-linux64
;;
esac
Al igual que en la primera compilación de GCC, requiere los paquetes GMP, MPFR y MPC. Desempaquete los archivos tar y muévalos a los nombres de directorio requeridos:
Y ahora creamos el directorio build, y entamos a verlo:tar -xf ../mpfr-4.0.1.tar.xz
mv -v mpfr-4.0.1 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
Configuramos el paquete:mkdir -v buildcd build
Compilamos el paquete:CC=$LFS_TGT-gcc \
CXX=$LFS_TGT-g++ \
AR=$LFS_TGT-ar \
RANLIB=$LFS_TGT-ranlib \
../configure \
--prefix=/tools \
--with-local-prefix=/tools \
--with-native-system-header-dir=/tools/include \
--enable-languages=c,c++ \
--disable-libstdcxx-pch \
--disable-multilib \
--disable-bootstrap \
--disable-libgomp
makeY ahora lo instalamos:
make installComo toque final, creamos un enlace simbólico. Muchos programas y scripts ejecutan CC en lugar de GCC, que se usa para mantener los programas genéricos y, por lo tanto, utilizables en todo tipo de sistemas UNIX donde el compilador GNU C no siempre está instalado. La ejecución de CC deja libre al administrador del sistema para decidir qué compilador de C instalar:
ln -sv gcc /tools/bin/cc
¡ PRECAUCIÓN !
En este punto, es imprescindible detenerse y garantizar que las funciones básicas (compilación y enlace) de la nueva cadena de herramientas funcionen como se esperaba. Para realizar una comprobación de cordura, ejecute los siguientes comandos:
echo 'int main(){}' > dummy.cSi todo funciona correctamente, no debería haber errores, y la salida del último comando será de la siguiente forma:
cc dummy.c
readelf -l a.out | grep ': /tools'
Tenemos que tener en cuenta que el enlazador dinámico será /tools/lib/ld-linux.so.2 para máquinas de 32 bits.[Requesting program interpreter: /tools/lib64/ld-linux-x86-64.so.2]
Si la salida no se muestra como arriba o no hubo salida, entonces algo está mal. Investigaremos y volvemos sobre los pasos para descubrir dónde está el problema y corregirlo. Este problema debe resolverse antes de continuar.
En primer lugar, realizar la comprobación de validez de nuevo, usando gcc en lugar de cc. Si esto funciona, entonces falta el enlace simbólico /tools/bin/cc. Instale el enlace simbólico como se indica arriba. A continuación, asegúrese de que la RUTA sea correcta. Esto puede comprobarse ejecutando echo $PATH y verificando que /tools/bin esté a la cabeza de la lista. Si la RUTA es incorrecta, podría significar que no ha iniciado sesión como usuario lfs o que algo salió mal en el paso "Configuración del entorno".
Si todo está bien, podemos continuar.
Salimos del directorio hasta llegar al directorio sources:
cd ../..
Tcl-8.6.8
El paquete Tcl contiene la Herramienta de Comando de Idioma.
Tiempo aproximado de compilación:
0.8 SBU
Tamaño de disco requerido:
66 MB
Este
paquete y los siguientes dos (Expect y DejaGNU) están instalados para
permitir la ejecución de suites de prueba para GCC, Binutils y otros
paquetes. La instalación de tres paquetes para fines de
prueba puede parecer excesiva, pero es muy tranquilizador, si no
esencial, saber que las herramientas más importantes funcionan
correctamente.
Estando en el directorio /mnt/lfs/sources, descomprimimos el paquete Tcl:
Entramos en el directorio que nos ha creado:tar -xvf tcl8.6.8-src.tar.gz
cd tcl8.6.8
Preparamos Tcl para compilación:
cd unix
./configure --prefix=/toolsConstruimos el paquete:
La compilación ahora está completa. Como se señaló anteriormente, la ejecución del conjunto de pruebas no es obligatorio para las herramientas temporales en este paso. Para ejecutar el conjunto de pruebas de Tcl de todos modos, ejecuta el siguiente comando:make
TZ=UTC make testEl conjunto de pruebas de Tcl puede experimentar fallas bajo ciertas condiciones de host que no se comprenden completamente. Por lo tanto, las fallas de la serie de pruebas aquí no son sorprendentes y no se consideran críticas. El parámetro TZ=UTC establece la zona horaria en Tiempo Universal Coordinado (UTC), pero solo durante la ejecución del conjunto de pruebas. Esto asegura que las pruebas de reloj se ejercen correctamente.
Instalamos el paquete:
make installHacemos que la biblioteca instalada sea editable para que los símbolos de depuración puedan eliminarse más adelante:
chmod -v u+w /tools/lib/libtcl8.6.soInstala los encabezados de Tcl. El siguiente paquete, Expect, los requiere para que se construya.
make install-private-headersAhora hacemos un enlace simbólico necesario:
ln -sv tclsh8.6 /tools/bin/tclshSalimos del directorio hasta situarnos en el directorio build.
cd ../..
Expect-5.45.4
El paquete Expect contiene un programa para llevar a cabo diálogos con guiones con otros programas interactivos.
Tiempo aproximado de compilación:
0.1 SBU
Tamaño de disco requerido:
3.9 MB
Descomprimimos el paquete Expect:
Entramos en el directorio que acabamos de extraer:tar -xvf expect5.45.4.tar.gz
cd expect5.45.4
cp -v configure{,.orig}Ahora preparamos Expect para compilar:
sed 's:/usr/local/bin:/bin:' configure.orig > configure
./configure --prefix=/tools \Construimos el paquete:
--with-tcl=/tools/lib \
--with-tclinclude=/tools/include
makeLa compilación ahora está completa. Como se señaló anteriormente, la ejecución del conjunto de pruebas no es obligatorio para las herramientas temporales en este paso. Para ejecutar el conjunto de pruebas Expect de todos modos, ejecutamos el siguiente comando:
make testTenemos que tener en cuenta que se sabe que el paquete de pruebas Expect experimenta fallos bajo ciertas condiciones de host que no están bajo nuestro control. Por lo tanto, los fallos de la suite de prueba aquí no son sorprendentes y no se consideran críticas.
Instalamos el paquete:
make SCRIPTS="" installSalimos del directorio hasta quedarnos en el directorio sources:
cd ..
DejaGNU-1.6.1
El paquete DejaGNU contiene un "framework" para probar otros programas.
cd ..
Tiempo aproximado de compilación:
menos de 0.1 SBU
Tamaño de disco requerido:
3.2 MB
Descomprimimos el paquete dejagnu:
Entramos en el directorio:tar -xvf dejagnu-1.6.1.tar.gz
cd dejagnu-1.6.1Preparamos el paquete:
./configure --prefix=/toolsConstruimos e instalamos el paquete:
make installProbamos los resultados:
make checkSalimos del directorio:
cd ..
Y lo dejamos hasta la siguiente publicación.
¡Espero que os esté gustando, y hasta la próxima!
Comentarios
Publicar un comentario