Estimación del tiempo de construcción: 22 minutos Estimación del espacio de disco requerido: 168 MB |
Se sabe que este programa se comporta mal si cambias sus parámetros de optimización (incluyendo las opciones -march y -mcpu). Es mejor dejar a GCC tal como está, así que te recomendamos borrar CFLAGS, CXXFLAGS y otras variables/parámetros como éstos que podrían cambiar la optimización con la que viene por defecto.
Instala GCC ejecutando los siguientes comandos:
patch -Np1 -i ../gcc-2.95.3-2.patch && mkdir ../gcc-build && cd ../gcc-build && ../gcc-2.95.3/configure --prefix=/usr --enable-languages=c,c++ \ --disable-nls --disable-shared --enable-threads=posix && make BOOT_LDFLAGS=-static bootstrap && make prefix=$LFS/usr install && cd $LFS/lib && ln -sf ../usr/bin/cpp && cd $LFS/usr/lib && ln -sf ../bin/cpp && cd $LFS/usr/bin && ln -sf gcc cc && rmdir $LFS/usr/*-gnu/include && rmdir $LFS/usr/*-gnu |
patch -Np1 -i ../gcc-2.95.3-2.patch: Este nuevo parche soluciona el manejo incorrecto de símbolos débiles, la sobreoptimización de las llamadas a estos símbolos débiles, y modifica atexit y el símbolo __dso_handle requerido para un funcionamiento correcto de atexit.
make BOOT_LDFLAGS=-static: Esto es el equivalente al "make LDFLAGS=-static" que usamos con otros paquetes para compilarlos estáticamente
--prefix=/usr: Esto NO es un error tipográfico. GCC establece directamente algunas rutas durante la compilación y por eso necesitamos pasar /usr como prefijo a ./configure. Pasamos el prefijo real de instalación posteriormente a "make install".
--enable-languages=c,c++: Con esto sólo se construyen los compiladores C y C++ y no el resto de compiladores disponibles, que no son habitualmente utilizados. Si se necesitan esos otros compiladores, el parámetro --enable-languages debe omitirse.
--enable-threads=posix: Esto activa el manejo de excepciones C++ en código multi-hilo.
ln -sf ../usr/bin/cpp: Esto crea el enlace simbólico $LFS/lib/cpp. Algunos paquetes intentan encontrar cpp explícitamente en /lib.
ln -sf ../bin/cpp: Esto crea el enlace simbólico $LFS/usr/lib/cpp para los paquetes que esperan encontrar cpp en /usr/lib.
rmdir $LFS/usr/*-gnu/include y rmdir $LFS/usr/*-gnu: Estos directorios son creados vacíos por GCC y no nos sirven para ningún propósito concreto. Están relacionados con la compilación cruzada pero no son de aplicación para nosotros y está considerado como un fallo de GCC que no podemos corregir, sobre todo porque acaban siendo directorios vacíos. Por eso tenemos que eliminarlos manualmente.
c++, c++filt, cc (enlace a gcc), cc1, cc1plus, collect2, cpp, cpp0, g++, gcc, gcov, protoize y unprotoize
Estos programas forman el compilador de C. Un compilador convierte el código fuente en formato de texto a un formato que un ordenador pueda entender. Después de que un fichero de código fuente es compilado en un fichero objeto, un enlazador creará un fichero ejecutable a partir de uno o más de estos ficheros objeto generados por el compilador.
cpp preprocesa los ficheros fuente, como en la inclusión del contenido de los ficheros de cabecera en los ficheros fuente. Es buena idea no hacer esto manualmente para ahorrar un montón de tiempo. Basta con insertar una línea del tipo #include <fichero>. El preprocesador inserta el contenido de ese fichero en el fichero fuente. Esta es una de las cosas que el preprocesador hace.
libgcc.a, libiberty.a, libstdc++.[a,so]
libgcc.a es un fichero de soporte en tiempo de ejecución para gcc. Con frecuencia, en la mayoría máquinas, libgcc.a no es realmente necesaria.
libiberty es una colección de subrutinas usadas por muchos programas GNU, incluidos getopt, obstack, strerror, strtol y strtoul.
libstdc++ es la librería C++. Es utilizada por programas escritos en C++ y contiene funciones que son usadas frecuentemente por esos programas. De esta forma el programador no necesita escribir ciertas funciones (como la escritura de una cadena de texto en pantalla) desde el principio cada vez que crea un programa.
Para instalar GCC-2.95.3 se necesita lo siguiente:
bash: sh
binutils: ar, as, ld, nm, ranlib
diffutils: cmp
fileutils: chmod, cp, ln, ls, mkdir, mv, rm, touch
find: find
gcc: cc, cc1, collect2, cpp0, gcc
grep: egrep, grep
make: make
patch: patch
sed: sed
sh-utils: basename, dirname, echo, expr, hostname, sleep, true, uname
tar: tar
texinfo: install-info, makeinfo
textutils: cat, tail, tr