Instalando GCC-2.95.3

Estimación del tiempo de construcción:      22 minutos
Estimación del espacio de disco requerido:  168 MB

Instalación de GCC

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

Explicación de los comandos

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.

Contenido de gcc-2.95.3

Dependencias

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