Manualinux
http://www.nvu.com http://www.gimp.org InicioPresentaciónActualizacionesManualesDescargasNoticiasZona WindowsEnlaces

Entornos GráficosAplicaciones

DesarrolloEmuladoresInternetJuegosMultimediaSistema

Instalar Clang desde ceroInstalar Java en GNU/Linux

Instalar GCC desde cero

Página - 1Página - 2




Instalar GCC desde cero




Copyright

Copyright © José Luis Lara Carrascal  2007-2013   http://manualinux.freehostia.com



Sumario

Introducción
Instalar GCC 4.8.1
Configurar el sistema para el uso de GCC 4.8.1
Convivencia de GCC 4.8.0 con GCC 4.8.1
Instalar GCC 4.7.3
Configurar el sistema para el uso de GCC 4.7.3
Convivencia de GCC 4.7.2 con GCC 4.7.3
Instalar GCC 4.6.4
Configurar el sistema para el uso de GCC 4.6.4
Convivencia de GCC 4.6.3 con GCC 4.6.4
Instalar GCC 4.5.4
Configurar el sistema para el uso de GCC 4.5.4
Convivencia de GCC 4.5.3 con GCC 4.5.4
Instalar GCC 4.4.7
Configurar el sistema para el uso de GCC 4.4.7
Convivencia de GCC 4.4.6 con GCC 4.4.7
Instalar GCC 4.3.6
Configurar el sistema para el uso de GCC 4.3.6
Convivencia de GCC 4.3.5 con GCC 4.3.6
Instalar GCC 4.2.4
Configurar el sistema para el uso de GCC 4.2.4
Convivencia de GCC 4.2.3 con GCC 4.2.4
Instalar GCC 3.4.6
Configurar el sistema para el uso de GCC 3.4.6
Instalar GCC 3.3.6
Configurar el sistema para el uso de GCC 3.3.6
Instalar GCC 3.2.3
Configurar el sistema para el uso de GCC 3.2.3
Enlaces




Introducción  

Con la publicación de este manual se oficializa dentro de la web el apartado dedicado a este indispensable compilador, y se incluye la versión más reciente del mismo, además de las otras versiones más recientes de otras series del mejor compilador del mundo GNU/Linux.

De lo que se trata es de que podamos siempre compilar un programa, y para eso tendremos que tener dos o tres versiones diferentes de GCC, aunque el número de versiones que podamos llegar a tener es ilimitado. La configuración del sistema para que puedan convivir las diferentes versiones de GCC es otro de los aspectos (incluso yo diría el más importante) más destacable de este documento.

Los lenguajes soportados en la compilación de GCC son los que habitualmente uso: C, C++ y Objetive C. Para terminar, y al igual que comenté en la introducción del manual del Kernel, esto no es un manual genérico de instalación de GCC, sino la radiografía de las instalaciones que un usuario de GNU/Linux viene haciendo hace ya unos cuantos años, sin haber tenido casi nunca, ningún tipo de problema en la convivencia de las diferentes versiones de GCC que tiene en su sistema GNU/Linux. Desde el 8 de mayo de 2012 se incluye también la instalación del lenguaje Fortran.



Instalar GCC 4.8.1

Instalación

Dependencias

Herramientas de Compilación


Entre paréntesis la versión con la que se ha compilado GCC 4.8.1 para la elaboración de este documento.

* GCC - (4.8.0)
* Gawk - (4.1.0)
* M4 - (1.4.16)
* Libtool - (2.4.2)
* Make - (3.82)
* Bison - (2.7.1)
* Flex - (2.5.37)
* Automake - (1.13.2)
* Autoconf - (2.69)
* Gettext - (0.18.2.1)

Librerías de Desarrollo

* Gmp - (5.1.2)
* Mpfr - (3.1.2)
* Mpc - (1.0.1)



Descarga

gcc-4.8.1.tar.bz2

Descarga del parche de actualización de GCC 4.8.0 a GCC 4.8.1

Los que hayan seguido el manual sólo tienen que bajarse el parche correspondiente de actualización.

gcc-4.8.0-4.8.1.diff.bz2

Aplicación del parche de actualización de GCC 4.8.0 a GCC 4.8.1

$ bunzip2 gcc-4.8.0-4.8.1.diff.bz2
$ tar jxvf gcc-4.8.0.tar.bz2
$ mv gcc-4.8.0 gcc-4.8.1
$ cd gcc-4.8.1
$ patch -Np1 -i ../gcc-4.8.0-4.8.1.diff
$ cd ..
$ tar Jcvf gcc-4.8.1.tar.xz gcc-4.8.1


Extracción y Configuración  Bloc de Notas Información general sobre el uso de los comandos

$ tar jxvf gcc-4.8.1.tar.bz2
$ mkdir gcc-build_4.8.1
$ cd gcc-build_4.8.1
$ ../gcc-4.8.1/configure --enable-shared --enable-threads=posix --enable-__cxa_atexit \
--enable-clocale=gnu --enable-languages=c,c++,fortran,objc --prefix=/opt/gcc-4.8.1


Explicación de los comandos

mkdir gcc-build_4.8.1 : Creamos un directorio de compilación, ya que GCC no permite que se compile directamente en el directorio de las fuentes.
--enable-shared : Compila las librerías compartidas (para entendernos, las *.so).
--enable-threads=posix : Selecciona la librería genérica POSIX/Unix98 para el soporte de hilos.
--enable-__cxa_atexit : Opción necesaria para una correcta compilación de c++.
--enable-clocale=gnu : Evita un error en la generación de las locales, en el caso de que estén incompletas.
--enable-languages=c,c++,fortran,objc : Compila los lenguajes de programación en C, C++, Fortran, y Objetive C.
--prefix=/opt/gcc-4.8.1 : Instala el compilador en /opt/gcc-4.8.1.

Compilación

$ make bootstrap

Parámetros de compilación opcionales  

-j2 : Si tenemos un procesador de doble núcleo (dual-core), y el kernel está optimizado para el mismo y es SMP, con este parámetro aumentaremos el número de procesos de compilación simultáneos a un nivel de 2 y aceleraremos el tiempo de compilación del programa de forma considerable.
-j4 : Lo mismo que arriba pero con procesadores de 4 núcleos (quad-core).

Instalación como root

$ su
# make install
# for i in /opt/gcc-4.8.1/bin/{gcc,g++,gfortran} ; do \
mv $i $i-4.8.1 ; \
done
# mv /opt/gcc-4.8.1/share/man/man1/gcc.1 /opt/gcc-4.8.1/share/man/man1/gcc-4.8.1.1
# mv /opt/gcc-4.8.1/share/man/man1/gfortran.1 /opt/gcc-4.8.1/share/man/man1/gfortran-4.8.1.1

Borrar las locales adicionales instaladas

$ su
# for i in be ca da de el eo fi fr hr id ja nl ru sr sv tr tk uk vi zh_CN zh_TW ; do \
rm -rf /opt/gcc-4.8.1/share/locale/$i &> /dev/null ; \
done

Desinstalación como root

1) MODO TRADICIONAL

En el directorio de compilación ejecutamos el siguiente comando como root:

$ su
# make uninstall

2) MODO MANUALINUX

El principal inconveniente del comando anterior es que tenermos que tener el directorio de compilación en nuestro sistema para poder desinstalar el programa. En algunos casos esto supone muchos megas de espacio en disco. Con el paquete de scripts que pongo a continuación logramos evitar el único inconveniente que tiene la compilación de programas, y es el tema de la desinstalación de los mismos sin la necesidad de tener obligatoriamente una copia de las fuentes compiladas.

gcc-4.8.1-scripts.tar.gz

$ su
# tar zxvf gcc-4.8.1-scripts.tar.gz
# cd gcc-4.8.1-scripts
# ./Desinstalar_gcc-4.8.1

La desinstalación del compilador no incluye las librerías compartidas (.so) para evitar problemas de dependencias en el caso de que hayamos compilado algún programa con esta versión de GCC.

Copia de Seguridad como root

Con este otro script creamos una copia de seguridad de los binarios compilados, recreando la estructura de directorios de los mismos en un directorio de copias de seguridad (copibin) que se crea en el directorio /var. Cuando se haya creado el paquete comprimido de los binarios podemos copiarlo como usuario a nuestro home y borrar el que ha creado el script de respaldo, teniendo en cuenta que si queremos volver a restaurar la copia, tendremos que volver a copiarlo al lugar donde se ha creado.

$ su
# tar zxvf gcc-4.8.1-scripts.tar.gz
# cd gcc-4.8.1-scripts
# ./Respaldar_gcc-4.8.1

Restaurar la Copia de Seguridad como root

Y con este otro script (que se copia de forma automática cuando creamos la copia de respaldo del programa) restauramos la copia de seguridad como root cuando resulte necesario.

$ su
# cd /var/copibin/restaurar_copias
# ./Restaurar_gcc-4.8.1

Soporte de optimizaciones para nuevos procesadores en GCC 4.8.x

En GCC 4.8.x se añade soporte de optimizaciones para los siguientes procesadores:

Procesadores Parámetros de optimización
Procesadores basados en AMD Family 15h core con soporte de instrucciones x86-64 (FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM y extensiones 64-bit) -march=bdver3 -mtune=bdver3
Procesadores basados en AMD Family 16h core con soporte de instrucciones x86-64 (MOVBE, F16C, BMI, AVX, PCL_MUL, AES, SSE4.2, SSE4.1, CX16, ABM, SSE4A, SSSE3, SSE3, SSE2, SSE, MMX y extensiones 64-bit) -march=btver2 -mtune=btver2



Configurar el sistema para el uso de GCC 4.8.1

1) /etc/ld.so.conf

Añadimos la ruta a las librerías en el archivo /etc/ld.so.conf.

include ld.so.conf.d/*.conf
/usr/X11R6/lib
/usr/lib
/usr/lib/qt3/lib
/usr/local/lib
/opt/e17/lib
/opt/gcc-4.8.1/lib


NOTA IMPORTANTE: Siempre hay que colocar la ruta al directorio /opt/gcc-4.8.1/lib, y los de otras versiones que se vayan a compilar, al final de la lista de directorios del archivo ld.so.conf, como se muestra en el ejemplo de arriba, para evitar que las aplicaciones y librerías de la distribución de turno escritas en C++ y Fortran, se enlacen contra las librerías libstdc++.so y libgfortran.so recién instaladas y no contra las del sistema, que por regla general suelen estar en /usr/lib. Esto provocaría que esas aplicaciones dejarían de funcionar al no haber sido compiladas con la versión contra la que se están enlazando.

El orden en el que se muestran los directorios es el que sigue el enlazador dinámico ld a la hora de buscar las dependencias requeridas para la ejecución de un binario o librería, tenerlo esto siempre en cuenta, y si alguien quiere experimentar con el tema, que pruebe a hacer todo lo contrario de lo que explico en esta nota.

Cuando lo hayamos editado y guardado ejecutamos la actualización de la caché de las librerías compartidas,

$ su
# ldconfig -v

2) Añadir la ruta a los binarios y las páginas de manual a nuestro PATH

2a) Variable de entorno PATH de usuario

Editamos el archivo de nuestro home, ~/.bashrc (si no existe lo creamos) y añadimos lo siguiente al final del mismo,

export PATH=/opt/gcc-4.8.1/bin:$PATH
export MANPATH=/opt/gcc-4.8.1/share/man:$MANPATH


2b) Variable de entorno PATH del sistema

Si queremos establecer una variable de entorno global del sistema, abrimos un editor de texto y añadimos lo siguiente:

#!/bin/sh

export PATH=/opt/gcc-4.8.1/bin:$PATH
export MANPATH=/opt/gcc-4.8.1/share/man:$MANPATH


Lo guardamos con el nombre gcc.sh, y lo instalamos en /etc/profile.d.

$ su
# install -m755 gcc.sh /etc/profile.d

Tenemos que cerrar el emulador de terminal y volverlo a abrir para que la variable de entorno aplicada sea efectiva. Es conveniente guardar una copia de este script para posteriores instalaciones de nuestro sistema. La ventaja de utilizar el directorio /etc/profile.d es que es común a todas las distribuciones y nos evita tener que editar otros archivos del sistema como por ejemplo, /etc/profile.

Para comprobar que la nueva versión aparece en el path basta teclear la palabra gcc, y pulsar el tabulador (la tecla de las dos flechas que está al lado de la letra Q en el teclado) para que autocomplete la lista de ejecutables disponibles relacionados con este comando, ejemplo:

[jose@localhost ~]$ gcc
gcc         gcc-3.2.3   gcc-3.4.3   gcc-4.1.2   gccbug      gccmakedep
[jose@localhost ~]$ gcc

En mi caso no aparece el número del compilador porque siempre lo coloco como compilador principal del sistema, es decir, no lo renombro. En el caso de que queramos que nuestra flamante versión sea la que utilice el sistema por defecto, sólo tenemos que editar los enlaces simbólicos que las distribuciones (no sé si todas) suelen crear a los binarios de sus respectivos compiladores, pongo el ejemplo de Mandriva, pero es perfectamente válido para todas.

Sobreescribo los enlaces pertinentes en el directorio /usr/bin, en el caso de Mandriva también se puede hacer en /etc/alternatives que es a donde apuntan los que están en /usr/bin.

# ln -sf /opt/gcc-4.8.1/bin/gcc-4.8.1 /usr/bin/gcc
# ln -sf /opt/gcc-4.8.1/bin/g++-4.8.1 /usr/bin/g++
# ln -sf /opt/gcc-4.8.1/bin/cpp /usr/bin

Antes de sobreescribirlos comprobar visualmente que son enlaces simbólicos, que cada distribución es un mundo. Y ahora cuando teclee en la ventana de terminal, gcc --version, me saldrá la que he instalado. Podemos comprobar también que el binario g++ funciona sin ningún problema.

[jose@localhost ~]$ gcc --version
gcc (GCC) 4.8.1
Copyright (C) 2013 Free Software Foundation, Inc.
Esto es software libre; vea el código para las condiciones de copia.  NO hay
garantía; ni siquiera para MERCANTIBILIDAD o IDONEIDAD PARA UN PROPÓSITO EN
PARTICULAR

[jose@localhost ~]$ g++ --version
g++ (GCC) 4.8.1
Copyright (C) 2013 Free Software Foundation, Inc.
Esto es software libre; vea el código para las condiciones de copia.  NO hay
garantía; ni siquiera para MERCANTIBILIDAD o IDONEIDAD PARA UN PROPÓSITO EN
PARTICULAR

En el caso de que no existan los enlaces simbólicos cc y c++ apuntando a /usr/bin/gcc y /usr/bin/g++, ya sea de forma directa o a través de los enlaces simbólicos, /etc/alternatives/cc y /etc/alternatives/c++, los creamos dentro del directorio /usr/bin.

# ln -sf /usr/bin/gcc /usr/bin/cc
# ln -sf /usr/bin/g++ /usr/bin/c++

Y comprobamos que funcionan correctamente,

[jose@localhost ~]$ cc --version
cc (GCC) 4.8.1
Copyright (C) 2013 Free Software Foundation, Inc.
Esto es software libre; vea el código para las condiciones de copia.  NO hay
garantía; ni siquiera para MERCANTIBILIDAD o IDONEIDAD PARA UN PROPÓSITO EN
PARTICULAR

[jose@localhost ~]$ c++ --version
c++ (GCC) 4.8.1
Copyright (C) 2013 Free Software Foundation, Inc.
Esto es software libre; vea el código para las condiciones de copia.  NO hay
garantía; ni siquiera para MERCANTIBILIDAD o IDONEIDAD PARA UN PROPÓSITO EN
PARTICULAR

En cambio, si no queremos que la versión instalada sea la que usamos por defecto, cada vez que queramos hacer uso de la misma deberemos de ejecutar las variables de entorno pertinentes, aunque esto no siempre es efectivo con todos los programas y puede que algunas veces tengamos que editar directamente los archivos Makefile, edición que explico en este mismo apartado.

a) Antes de ejecutar el script configure

$ export CC=gcc-4.8.1; export CXX=g++-4.8.1; export {FC,F90,F95,F77}=gfortran-4.8.1

b) Comprobar que se ha establecido la variable y está usando la versión 4.8.1

Existen muchas maneras pero hay una que no falla y es la salida de información en la ventana de terminal cuando ejecutamos el script configure, y la ejecución del comando make que pone en marcha a GCC, más ejemplos: 

Ejemplo 1: Salida de información cuando ejecutamos el script de configuración

[jose@localhost e16-0.16.8.15]$ ./configure
checking for a BSD-compatible install... /bin/install -c
checking whether build environment is sane... yes
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether to enable maintainer-specific portions of Makefiles... no
checking for gcc... gcc-4.8.1

un poquito más abajo comprueba la existencia de g++

checking whether we are using the GNU C++ compiler... yes
checking whether g++-4.8.1 accepts -g... yes
checking dependency style of g++-4.8.1... gcc3
checking how to run the C++ preprocessor... g++-4.8.1 -E


Ejemplo 2: El proceso de compilación nos quita las últimas dudas que tengamos

if gcc-4.8.1 -DHAVE_STRERROR -DFATAL_EXIT_CODE=1 -DSUCCESS_EXIT_CODE=1 -DGCC_INCLUDE_DIR=\"/usr/include\" -DGPLUSPLUS_INCLUDE_DIR=\"/usr/include\" -DTOOL_INCLUDE_DIR=\"/usr/bin\" -DHOST_BITS_PER_LONG=32 -DBITS_PER_UNIT=8 -DHOST_BITS_PER_INT=32 -DBITS_PER_WORD=16 -DTARGET_BELL=7 -DTARGET_BS=8 -DTARGET_FF=12 -DTARGET_NEWLINE=10 -DTARGET_CR=13 -DTARGET_TAB=9 -DTARGET_VT=11 -I. -I. -I.. -I.. -I..  -I/usr/X11R6/include   -g -O2 -MT cpplib.o -MD -MP -MF ".deps/cpplib.Tpo" -c -o cpplib.o cpplib.c; \

b) ¿Qué sucede cuando no me coge la variable de entorno ó en paquetes que contienen sólo el archivo Makefile?

Pues nada, que hay que tirar de editor de texto y modificar los apartados correspondientes en todos los archivos Makefile que contenga el directorio de compilación y subdirectorios, si éstos existen. Un ejemplo,

Antes

CC = gcc
CCDEPMODE = depmode=gcc3
CFLAGS = -g -O2  -I/usr/X11R6/include -I/usr/X11R7/include -I/usr/X11R7/include/freetype2 
CPP = gcc -E
CPPFLAGS =
CXX = g++
CXXCPP = g++ -E

Después

CC = gcc-4.8.1
CCDEPMODE = depmode=gcc3
CFLAGS = -g -O2  -I/usr/X11R6/include -I/usr/X11R7/include -I/usr/X11R7/include/freetype2 
CPP = gcc-4.8.1 -E
CPPFLAGS =
CXX = g++-4.8.1
CXXCPP = g++-4.8.1 -E

Aunque esto suele ser por norma muy poco común y la mayoría de programas aceptan las variables de entorno que ejecutemos en la línea de comandos, excepto los que utilizan sólo archivos Makefile.

2c) Lectura de las páginas de manual

$ man gcc-4.8.1
$ man gfortran-4.8.1

3) Libstdc++.so y Libgfortran.so, y los programas y librerías escritos en C++ y Fortran

Cuando vayamos a compilar programas o librerías escritos en C++ o Fortran mediante el uso de las herramientas GNU, es recomendable ejecutar siempre la variable de entorno siguiente antes de ejecutar el script configure:

$ export LDFLAGS="-Wl,-rpath,/opt/gcc-4.8.1/lib -lstdc++ -lgfortran"

O de forma alternativa cuando esta no funciona con un paquete determinado, añadirla a las variables de optimización del programa,

$ export CXXFLAGS="-Wl,-rpath,/opt/gcc-4.8.1/lib -lstdc++ "${CFLAGS}
$ export FCFLAGS="-Wl,-rpath,/opt/gcc-4.8.1/lib -lgfortran "${FCFLAGS}

Esto evita errores en el proceso de compilación, debido a que el enlazador dinámico ld, intenta enlazarse contra la librería libstdc++.so o libgfortran.so del sistema, siguiendo el orden establecido en el archivo /etc/ld.so.conf, normalmente la que está en /usr/lib, y no contra la librería del compilador que estemos utilizando. En este caso la ruta correcta para GCC 4.8.1 es /opt/gcc-4.8.1/lib, a la que se le añade el nombre genérico (no es estrictamente necesario ponerlo, pero en determinadas compilaciones, el no hacerlo supone el fracaso de la misma) de la librería: -lstdc++ y -lgfortran, si la versión a utilizar la tenemos en otro directorio, tendremos que cambiar sólo la ruta, /opt/gcc-4.8.1/lib por la de la librería del compilador en cuestión.

Si el paquete a compilar sólo contiene archivos Makefile habrá que añadirlo en el apartado LDFLAGS = del mismo, si no existe lo añadimos entero debajo de cualquiera de los otros parámetros del archivo Makefile. También se puede hacer uso de las correspondientes variables de entorno que admita el comando make. Un ejemplo:

F77 =
FFLAGS =
ICONV =
INSTALL_DATA = ${INSTALL} -m 644
INSTALL_PROGRAM = ${INSTALL}
INSTALL_SCRIPT = ${INSTALL}
INSTALL_STRIP_PROGRAM = ${SHELL} $(install_sh) -c -s
LDFLAGS = -Wl,-rpath,/opt/gcc-4.8.1/lib -lstdc++ -lgfortran

Recordar que los programas y librerías escritos en C++ se distinguen por la extensión del archivo de código que puede ser:

archivo.cc
archivo.cp
archivo.cxx
archivo.cpp
archivo.CPP
archivo.c++
archivo.C


Y en el caso de Fortran, pueden ser:

archivo.f90
archivo.f95
archivo.f03
archivo.f
archivo.for

Y también lo podemos saber por los mensajes que se muestran en la terminal en el proceso de compilación, al utilizarse g++ para el mismo:

if g++-4.8.1 -DHAVE_CONFIG_H -I. -I. -I..   -I/usr/local/include -I/usr/X11R7/include -DSHAPE -DXFT  -DNLS -DLOCALEPATH=\"/usr/local/share/blackbox/nls\" -DDEFAULTMENU=\"/usr/local/share/blackbox/menu\" -DDEFAULTSTYLE=\"/usr/local/share/blackbox/styles/Gray\" -I../lib  -O3 -march=k6-2 -mtune=k6-2 -mmmx -m3dnow 

En muchos programas y librerías suele haber código mezclado en C y en C++, con lo que se utilizan tanto gcc como g++ para el proceso de compilación.

Recalcar para finalizar esta nota que esta regla no siempre se cumple en todos los procesos de compilación, debido a que los scripts de configuración de los paquetes no son todos iguales y no siguen un estándar mayoritario, sobre todo cuando no se utiliza libtool para el correcto enlazado de las librerías y programas o simplemente la forma en que está diseñado el script impide poder enlazar correctamente el binario en cuestión, con lo que algún que otro paquete (afortunadamente una minoría) nos va a dar más de un quebradero de cabeza con el dichoso enlazado.

4) Cuando el script de configuración puede más que la variable anterior

Estoy comprobando que en las compilaciones con G++ 4.6.x se produce el siguiente error aún aplicando la variable anteriormente explicada. Un ejemplo con el juego Briquolo que también es aplicable al emulador DOSBox:

L/usr/X11R7/lib -lfreetype -lz -L/usr/lib -lpng14 -lpng14 -L/usr/lib -Wl,-rpath,/usr/lib -lSDL -lpthread   -L/usr/X11R7/lib -lSDL_mixer -lSDL_ttf
Balle.o: In function `Balle::Balle(Balle const&)':
Balle.cpp:(.text+0xb53): undefined reference to `std::_List_node_base::_M_hook(std::_List_node_base*)'
Balle.cpp:(.text+0xbba): undefined reference to `std::_List_node_base::_M_hook(std::_List_node_base*)'
Balle.o: In function `Balle::Balle()':

La solución pasa por borrar todas las referencias a la variable -L/usr/lib en los archivos Makefile generados. Después de ejecutar el script de configuración, mediante el uso de find+xargs+sed ejecutamos el siguiente comando que borrará todas las referencias a esta variable:

$ find . -name 'Makefile' | xargs sed -i 's:-L/usr/lib::g'

5) La opción '-static-libstdc++' a partir de GCC 4.5.x

A partir de GCC 4.5.x se ha implementado la posibilidad de pasarle al compilador, el parámetro '-static-libstdc++', para que se enlace de forma estática contra la versión de libstdc++ del compilador utilizado en lugar de hacerlo de forma dinámica con el predefinido del sistema. Dicho de otro modo, podemos compilar un binario que se enlace de forma dinámica contra todas sus dependencias excepto contra libstdc++, que lo hará de forma estática. Esto soluciona en parte, los problemas que se producían con el enlazado dinámico explicado en los apartados anteriores, aunque en los manuales publicados se seguirá intentando utilizar el procedimiento anterior, que es aplicable a cualquier versión de GCC.

Hay que tener en cuenta que el uso de esta opción, en algunos casos, aumentará de forma considerable el tamaño de los binarios resultantes del proceso de compilación.

$ export LDFLAGS="-static-libstdc++"




Convivencia de GCC 4.8.0 con GCC 4.8.1

Este apartado sólo está indicado para los que siguen el manual. No tiene sentido ninguno tener 2 versiones de una misma serie del compilador, así que cuando comprobemos que GCC 4.8.1 compila sin ningún problema, desinstalaremos la versión 4.8.0 cuyos scripts pongo a continuación.

gcc-4.8.0-scripts.tar.gz

$ su
# tar zxvf gcc-4.8.0-scripts.tar.gz
# cd gcc-4.8.0-scripts
# ./Desinstalar_gcc-4.8.0

La desinstalación del compilador no incluye las librerías compartidas (.so) para evitar problemas de dependencias en el caso de que hayamos compilado algún programa con esta versión de GCC.



Instalar GCC 4.7.3

Instalación

Dependencias

Herramientas de Compilación


Entre paréntesis la versión con la que se ha compilado GCC 4.7.3 para la elaboración de este documento.

* GCC - (4.8.0)
* Gawk - (4.0.2)
* M4 - (1.4.16)
* Libtool - (2.4.2)
* Make - (3.82)
* Bison - (2.7)
* Flex - (2.5.37)
* Automake - (1.13.1)
* Autoconf - (2.69)
* Gettext - (0.18.2.1)

Librerías de Desarrollo

* Gmp - (5.1.1)
* Mpfr - (3.1.2)
* Mpc - (1.0.1)



Descarga

gcc-4.7.3.tar.bz2

Descarga del parche de actualización de GCC 4.7.2 a GCC 4.7.3

Los que hayan seguido el manual sólo tienen que bajarse el parche correspondiente de actualización.

gcc-4.7.2-4.7.3.diff.bz2

Aplicación del parche de actualización de GCC 4.7.2 a GCC 4.7.3

$ bunzip2 gcc-4.7.2-4.7.3.diff.bz2
$ tar Jxvf gcc-4.7.2.tar.xz
$ mv gcc-4.7.2 gcc-4.7.3
$ cd gcc-4.7.3
$ patch -Np1 -i ../gcc-4.7.2-4.7.3.diff
$ cd ..
$ tar Jcvf gcc-4.7.3.tar.xz gcc-4.7.3


Extracción y Configuración  Bloc de Notas Información general sobre el uso de los comandos

$ tar jxvf gcc-4.7.3.tar.bz2
$ mkdir gcc-build_4.7.3
$ cd gcc-build_4.7.3
$ ../gcc-4.7.3/configure --enable-shared --enable-threads=posix --enable-__cxa_atexit \
--enable-clocale=gnu --enable-languages=c,c++,fortran,objc --prefix=/opt/gcc-4.7.3


Explicación de los comandos

mkdir gcc-build_4.7.3 : Creamos un directorio de compilación, ya que GCC no permite que se compile directamente en el directorio de las fuentes.
--enable-shared : Compila las librerías compartidas (para entendernos, las *.so).
--enable-threads=posix : Selecciona la librería genérica POSIX/Unix98 para el soporte de hilos.
--enable-__cxa_atexit : Opción necesaria para una correcta compilación de c++.
--enable-clocale=gnu : Evita un error en la generación de las locales, en el caso de que estén incompletas.
--enable-languages=c,c++,fortran,objc : Compila los lenguajes de programación en C, C++, Fortran, y Objetive C.
--prefix=/opt/gcc-4.7.3 : Instala el compilador en /opt/gcc-4.7.3.

Compilación

$ make bootstrap

Parámetros de compilación opcionales  

-j2 : Si tenemos un procesador de doble núcleo (dual-core), y el kernel está optimizado para el mismo y es SMP, con este parámetro aumentaremos el número de procesos de compilación simultáneos a un nivel de 2 y aceleraremos el tiempo de compilación del programa de forma considerable.
-j4 : Lo mismo que arriba pero con procesadores de 4 núcleos (quad-core).

Instalación como root

$ su
# make install
# for i in /opt/gcc-4.7.3/bin/{gcc,g++,gfortran} ; do \
mv $i $i-4.7.3 ; \
done
# mv /opt/gcc-4.7.3/share/man/man1/gcc.1 /opt/gcc-4.7.3/share/man/man1/gcc-4.7.3.1
# mv /opt/gcc-4.7.3/share/man/man1/gfortran.1 /opt/gcc-4.7.3/share/man/man1/gfortran-4.7.3.1

Borrar las locales adicionales instaladas

$ su
# for i in be ca da de el eo fi fr hr id ja nl ru sr sv tr tk uk vi zh_CN zh_TW ; do \
rm -rf /opt/gcc-4.7.3/share/locale/$i &> /dev/null ; \
done

Desinstalación como root

1) MODO TRADICIONAL

En el directorio de compilación ejecutamos el siguiente comando como root:

$ su
# make uninstall

2) MODO MANUALINUX

El principal inconveniente del comando anterior es que tenermos que tener el directorio de compilación en nuestro sistema para poder desinstalar el programa. En algunos casos esto supone muchos megas de espacio en disco. Con el paquete de scripts que pongo a continuación logramos evitar el único inconveniente que tiene la compilación de programas, y es el tema de la desinstalación de los mismos sin la necesidad de tener obligatoriamente una copia de las fuentes compiladas.

gcc-4.7.3-scripts.tar.gz

$ su
# tar zxvf gcc-4.7.3-scripts.tar.gz
# cd gcc-4.7.3-scripts
# ./Desinstalar_gcc-4.7.3

La desinstalación del compilador no incluye las librerías compartidas (.so) para evitar problemas de dependencias en el caso de que hayamos compilado algún programa con esta versión de GCC.

Copia de Seguridad como root

Con este otro script creamos una copia de seguridad de los binarios compilados, recreando la estructura de directorios de los mismos en un directorio de copias de seguridad (copibin) que se crea en el directorio /var. Cuando se haya creado el paquete comprimido de los binarios podemos copiarlo como usuario a nuestro home y borrar el que ha creado el script de respaldo, teniendo en cuenta que si queremos volver a restaurar la copia, tendremos que volver a copiarlo al lugar donde se ha creado.

$ su
# tar zxvf gcc-4.7.3-scripts.tar.gz
# cd gcc-4.7.3-scripts
# ./Respaldar_gcc-4.7.3

Restaurar la Copia de Seguridad como root

Y con este otro script (que se copia de forma automática cuando creamos la copia de respaldo del programa) restauramos la copia de seguridad como root cuando resulte necesario.

$ su
# cd /var/copibin/restaurar_copias
# ./Restaurar_gcc-4.7.3

Soporte de optimizaciones para nuevos procesadores en GCC 4.7.x

En GCC 4.7.x se añade soporte de optimizaciones para los siguientes procesadores:

Procesadores Parámetros de optimización
Intel Core (ivyBridge) con extensiones 64-bit y soporte de instrucciones MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AES, PCLMUL, FSGSBASE, RDRND y F16C -march=core-avx-i -mtune=core-avx-i
Intel Core (Haswell) -march=core-avx2 -mtune=core-avx2
Procesadores basados en AMD Family 15h core con soporte de instrucciones x86-64 (FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM y extensiones 64-bit) -march=bdver1 -mtune=bdver1
Procesadores basados en AMD Family 15h core con soporte de instrucciones x86-64 (BMI, TBM, F16C, FMA, LWP, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM y extensiones 64-bit) -march=bdver2 -mtune=bdver2



Configurar el sistema para el uso de GCC 4.7.3

1) /etc/ld.so.conf


Añadimos la ruta a las librerías en el archivo /etc/ld.so.conf.

include ld.so.conf.d/*.conf
/usr/X11R6/lib
/usr/lib
/usr/lib/qt3/lib
/usr/local/lib
/opt/e17/lib
/opt/gcc-4.8.1/lib
/opt/gcc-4.7.3/lib


Cuando lo hayamos editado y guardado ejecutamos la actualización de la caché de las librerías compartidas,

$ su
# ldconfig -v

2) Añadir la ruta a los binarios y las páginas de manual a nuestro PATH

2a) Variable de entorno PATH de usuario

Editamos el archivo de nuestro home, ~/.bashrc (si no existe lo creamos) y añadimos lo siguiente al final del mismo,

export PATH=/opt/gcc-4.7.3/bin:$PATH
export MANPATH=/opt/gcc-4.7.3/share/man:$MANPATH


Si estamos siguiendo el manual lo añadimos a la variable de entorno anterior,

export PATH=/opt/gcc-4.8.1/bin:/opt/gcc-4.7.3/bin:$PATH
export MANPATH=/opt/gcc-4.8.1/share/man:/opt/gcc-4.7.3/share/man:$MANPATH


2b) Variable de entorno PATH del sistema

Si queremos establecer una variable de entorno global del sistema, abrimos un editor de texto y añadimos lo siguiente:

#!/bin/sh

export PATH=/opt/gcc-4.7.3/bin:$PATH
export MANPATH=/opt/gcc-4.7.3/share/man:$MANPATH


Si estamos siguiendo el manual lo añadimos a la variable de entorno anterior,

#!/bin/sh

export PATH=/opt/gcc-4.8.1/bin:/opt/gcc-4.7.3/bin:$PATH
export MANPATH=/opt/gcc-4.8.1/share/man:/opt/gcc-4.7.3/share/man:$MANPATH

Lo guardamos con el nombre gcc.sh, y lo instalamos en /etc/profile.d.

$ su
# install -m755 gcc.sh /etc/profile.d

Tenemos que cerrar el emulador de terminal y volverlo a abrir para que la variable de entorno aplicada sea efectiva. Es conveniente guardar una copia de este script para posteriores instalaciones de nuestro sistema. La ventaja de utilizar el directorio /etc/profile.d es que es común a todas las distribuciones y nos evita tener que editar otros archivos del sistema como por ejemplo, /etc/profile.

2c) Lectura de las páginas de manual

$ man gcc-4.7.3
$ man gfortran-4.7.3

3) Uso de GCC 4.7.3

Esto está ampliamente explicado en este apartado, sólo cambia el número de la versión a utilizar,

$ export CC=gcc-4.7.3; export CXX=g++-4.7.3; export {FC,F90,F95,F77}=gfortran-4.7.3



Convivencia de GCC 4.7.2 con GCC 4.7.3

Este apartado sólo está indicado para los que siguen el manual. No tiene sentido ninguno tener 2 versiones de una misma serie del compilador, así que cuando comprobemos que GCC 4.7.3 compila sin ningún problema, desinstalaremos la versión 4.7.2 cuyos scripts pongo a continuación.

gcc-4.7.2-scripts.tar.gz

$ su
# tar zxvf gcc-4.7.2-scripts.tar.gz
# cd gcc-4.7.2-scripts
# ./Desinstalar_gcc-4.7.2

La desinstalación del compilador no incluye las librerías compartidas (.so) para evitar problemas de dependencias en el caso de que hayamos compilado algún programa con esta versión de GCC.



Instalar GCC 4.6.4

Instalación

Dependencias

Herramientas de Compilación


Entre paréntesis la versión con la que se ha compilado GCC 4.6.4 para la elaboración de este documento.

* GCC - (4.8.0)
* Gawk - (4.0.2)
* M4 - (1.4.16)
* Libtool - (2.4.2)
* Make - (3.82)
* Bison - (2.7)
* Flex - (2.5.37)
* Automake - (1.13.1)
* Autoconf - (2.69)
* Gettext - (0.18.2.1)

Librerías de Desarrollo

* Gmp - (5.1.1)
* Mpfr - (3.1.2)
* Mpc - (1.0.1)



Descarga

gcc-core-4.6.4.tar.bz2  |  gcc-g++-4.6.4.tar.bz2  |  gcc-fortran-4.6.4.tar.bz2  |  gcc-objc-4.6.4.tar.bz2

Descarga de los parches de actualización de GCC 4.6.3 a GCC 4.6.4


Los que hayan seguido el manual sólo tienen que bajarse los parches correspondientes de actualización.

gcc-core-4.6.3-4.6.4.diff.bz2  |  gcc-g++-4.6.3-4.6.4.diff.bz2  |  gcc-fortran-4.6.3-4.6.4.diff.bz2  |  gcc-objc-4.6.3-4.6.4.diff.bz2

Aplicación de los parches de actualización de GCC 4.6.3 a GCC 4.6.4

$ bunzip2 *-4.6.4.diff.bz2
$ tar Jxvf gcc-4.6.3.tar.xz
$ mv gcc-4.6.3 gcc-4.6.4
$ cd gcc-4.6.4
$ patch -Np1 -i ../gcc-core-4.6.3-4.6.4.diff
$ patch -Np1 -i ../gcc-g++-4.6.3-4.6.4.diff
$ patch -Np1 -i ../gcc-fortran-4.6.3-4.6.4.diff
$ patch -Np1 -i ../gcc-objc-4.6.3-4.6.4.diff
$ cd ..
$ tar Jcvf gcc-4.6.4.tar.xz gcc-4.6.4


Extracción y Configuración  Bloc de Notas Información general sobre el uso de los comandos

$ tar jxvf gcc-core-4.6.4.tar.bz2
$ tar jxvf gcc-g++-4.6.4.tar.bz2
$ tar jxvf gcc-fortran-4.6.4.tar.bz2
$ tar jxvf gcc-objc-4.6.4.tar.bz2
$ tar Jcvf gcc-4.6.4.tar.xz gcc-4.6.4
$ mkdir gcc-build_4.6.4
$ cd gcc-build_4.6.4
$ ../gcc-4.6.4/configure --enable-shared --enable-threads=posix --enable-__cxa_atexit \
--enable-clocale=gnu --enable-languages=c,c++,fortran,objc --prefix=/opt/gcc-4.6.4


Explicación de los comandos

tar Jcvf gcc-4.6.4.tar.xz gcc-4.6.4 : Comprimimos el directorio de las fuentes en un sólo paquete que en próximas versiones del compilador servirá de base para aplicar los correspondientes parches de actualización, evitando el tener que bajar los paquetes completos en cada versión nueva del compilador. Los 4 paquetes comprimidos descargados se pueden borrar sin ningún problema.

mkdir gcc-build_4.6.4 : Creamos un directorio de compilación, ya que GCC no permite que se compile directamente en el directorio de las fuentes.
--enable-shared : Compila las librerías compartidas (para entendernos, las *.so).
--enable-threads=posix : Selecciona la librería genérica POSIX/Unix98 para el soporte de hilos.
--enable-__cxa_atexit : Opción necesaria para una correcta compilación de c++.
--enable-clocale=gnu : Evita un error en la generación de las locales, en el caso de que estén incompletas.
--enable-languages=c,c++,fortran,objc : Compila los lenguajes de programación en C, C++, Fortran, y Objetive C.
--prefix=/opt/gcc-4.6.4 : Instala el compilador en /opt/gcc-4.6.4.

Compilación

$ make bootstrap

Parámetros de compilación opcionales

Instalación como root

$ su
# make install
# for i in /opt/gcc-4.6.4/bin/{gcc,g++,gfortran} ; do \
mv $i $i-4.6.4 ; \
done
# mv /opt/gcc-4.6.4/share/man/man1/gcc.1 /opt/gcc-4.6.4/share/man/man1/gcc-4.6.4.1
# mv /opt/gcc-4.6.4/share/man/man1/gfortran.1 /opt/gcc-4.6.4/share/man/man1/gfortran-4.6.4.1

Borrar las locales adicionales instaladas

$ su
# for i in be ca da de el fi fr id ja nl ru sr sv tr tk uk vi zh_CN zh_TW ; do \
rm -rf /opt/gcc-4.6.4/share/locale/$i &> /dev/null ; \
done

Desinstalación como root

1) MODO TRADICIONAL

En el directorio de compilación ejecutamos el siguiente comando como root:

$ su
# make uninstall

2) MODO MANUALINUX

gcc-4.6.4-scripts.tar.gz

$ su
# tar zxvf gcc-4.6.4-scripts.tar.gz
# cd gcc-4.6.4-scripts
# ./Desinstalar_gcc-4.6.4

La desinstalación del compilador no incluye las librerías compartidas (.so) para evitar problemas de dependencias en el caso de que hayamos compilado algún programa con esta versión de GCC.

Copia de Seguridad como root

$ su
# tar zxvf gcc-4.6.4-scripts.tar.gz
# cd gcc-4.6.4-scripts
# ./Respaldar_gcc-4.6.4

Restaurar la Copia de Seguridad como root

$ su
# cd /var/copibin/restaurar_copias
# ./Restaurar_gcc-4.6.4

Soporte de optimizaciones para nuevos procesadores en GCC 4.6.x

En GCC 4.6.x se añade soporte de optimizaciones para los siguientes procesadores:

Procesadores Parámetros de optimización
Intel Core i3/i5/i7 -march=corei7 -mtune=corei7
Intel Core i3/i5/i7 con AVX -march=corei7-avx -mtune=corei7-avx
AMD Bobcat (family 14) -march=btver1 -mtune=btver1



Configurar el sistema para el uso de GCC 4.6.4

1) /etc/ld.so.conf


Añadimos la ruta a las librerías en el archivo /etc/ld.so.conf.

include ld.so.conf.d/*.conf
/usr/X11R6/lib
/usr/lib
/usr/lib/qt3/lib
/usr/local/lib
/opt/e17/lib
/opt/gcc-4.8.1/lib
/opt/gcc-4.7.3/lib
/opt/gcc-4.6.4/lib


Cuando lo hayamos editado y guardado ejecutamos la actualización de la caché de las librerías compartidas,

$ su
# ldconfig -v

2) Añadir la ruta a los binarios y las páginas de manual a nuestro PATH

2a) Variable de entorno PATH de usuario

Editamos el archivo de nuestro home, ~/.bashrc (si no existe lo creamos) y añadimos lo siguiente al final del mismo,

export PATH=/opt/gcc-4.6.4/bin:$PATH
export MANPATH=/opt/gcc-4.6.4/share/man:$MANPATH


Si estamos siguiendo el manual lo añadimos a la variable de entorno anterior,

export PATH=/opt/gcc-4.8.1/bin:/opt/gcc-4.7.3/bin:/opt/gcc-4.6.4bin:$PATH
export MANPATH=/opt/gcc-4.8.1/share/man:/opt/gcc-4.7.3/share/man:/opt/gcc-4.6.4/share/man:$MANPATH


2b) Variable de entorno PATH del sistema

Si queremos establecer una variable de entorno global del sistema, abrimos un editor de texto y añadimos lo siguiente:

#!/bin/sh

export PATH=/opt/gcc-4.6.4/bin:$PATH
export MANPATH=/opt/gcc-4.6.4/share/man:$MANPATH


Si estamos siguiendo el manual lo añadimos a la variable de entorno anterior,

#!/bin/sh

export PATH=/opt/gcc-4.8.1/bin:/opt/gcc-4.7.3/bin:/opt/gcc-4.6.4/bin:$PATH
export MANPATH=/opt/gcc-4.8.1/share/man:/opt/gcc-4.7.3/share/man:/opt/gcc-4.6.4/share/man:$MANPATH

Lo guardamos con el nombre gcc.sh, y lo instalamos en /etc/profile.d.

$ su
# install -m755 gcc.sh /etc/profile.d

Tenemos que cerrar el emulador de terminal y volverlo a abrir para que la variable de entorno aplicada sea efectiva. Es conveniente guardar una copia de este script para posteriores instalaciones de nuestro sistema. La ventaja de utilizar el directorio /etc/profile.d es que es común a todas las distribuciones y nos evita tener que editar otros archivos del sistema como por ejemplo, /etc/profile.

2c) Lectura de las páginas de manual

$ man gcc-4.6.4
$ man gfortran-4.6.4

3) Uso de GCC 4.6.4

Esto está ampliamente explicado en este apartado, sólo cambia el número de la versión a utilizar,

$ export CC=gcc-4.6.4; export CXX=g++-4.6.4; export {FC,F90,F95,F77}=gfortran-4.6.4

6) Errores específicos de GCC 4.6.x

En compilaciones con GCC 4.6.x se están produciendo errores similares a éste:

fluxconf.c: En la función 'sauver':
fluxconf.c:146:25: error: se definió el parámetro 'button' pero no se usa [-Werror=unused-but-set-parameter]

Solución: establecer la siguiente variable de entorno antes de ejecutar el script configure,

$ export CPPFLAGS='-Wno-error=unused-but-set-parameter -Wno-error=unused-but-set-variable '${CPPFLAGS}




Convivencia de GCC 4.6.3 con GCC 4.6.4

Este apartado sólo está indicado para los que siguen el manual. No tiene sentido ninguno tener 2 versiones de una misma serie del compilador, así que cuando comprobemos que GCC 4.6.4 compila sin ningún problema, desinstalaremos la versión 4.6.3 cuyos scripts pongo a continuación.

gcc-4.6.3-scripts.tar.gz

$ su
# tar zxvf gcc-4.6.3-scripts.tar.gz
# cd gcc-4.6.3-scripts
# ./Desinstalar_gcc-4.6.3

La desinstalación del compilador no incluye las librerías compartidas (.so) para evitar problemas de dependencias en el caso de que hayamos compilado algún programa con esta versión de GCC.



Instalar GCC 4.5.4

Instalación

Dependencias

Herramientas de Compilación


Entre paréntesis la versión con la que se ha compilado GCC 4.5.4 para la elaboración de este documento.

* GCC - (4.6.3)
* Gawk - (4.0.1)
* M4 - (1.4.16)
* Libtool - (2.4.2)
* Make - (3.82)
* Bison - (2.5.1)
* Flex - (2.5.35)
* Automake - (1.12.1)
* Autoconf - (2.69)
* Gettext - (0.18.1.1)

Librerías de Desarrollo

* Gmp - (5.0.5)
* Mpfr - (3.1.1)
* Mpc - (0.9)



Descarga

gcc-core-4.5.4.tar.bz2  |  gcc-g++-4.5.4.tar.bz2  |  gcc-fortran-4.5.4.tar.bz2  |  gcc-objc-4.5.4.tar.bz2

Descarga de los parches de actualización de GCC 4.5.3 a GCC 4.5.4


Los que hayan seguido el manual sólo tienen que bajarse los parches correspondientes de actualización.

gcc-core-4.5.3-4.5.4.diff.bz2  |  gcc-g++-4.5.3-4.5.4.diff.bz2  |  gcc-fortran-4.5.3-4.5.4.diff.bz2  |  gcc-objc-4.5.3-4.5.4.diff.bz2

Aplicación de los parches de actualización de GCC 4.5.3 a GCC 4.5.4

$ bunzip2 *-4.5.4.diff.bz2
$ tar Jxvf gcc-4.5.3.tar.xz
$ mv gcc-4.5.3 gcc-4.5.4
$ cd gcc-4.5.4
$ patch -Np1 -i ../gcc-core-4.5.3-4.5.4.diff
$ patch -Np1 -i ../gcc-g++-4.5.3-4.5.4.diff
$ patch -Np1 -i ../gcc-fortran-4.5.3-4.5.4.diff
$ patch -Np1 -i ../gcc-objc-4.5.3-4.5.4.diff
$ cd ..
$ tar Jcvf gcc-4.5.4.tar.xz gcc-4.5.4


Extracción y Configuración  Bloc de Notas Información general sobre el uso de los comandos

$ tar jxvf gcc-core-4.5.4.tar.bz2
$ tar jxvf gcc-g++-4.5.4.tar.bz2
$ tar jxvf gcc-fortran-4.5.4.tar.bz2
$ tar jxvf gcc-objc-4.5.4.tar.bz2
$ tar Jcvf gcc-4.5.4.tar.xz gcc-4.5.4
$ mkdir gcc-build_4.5.4
$ cd gcc-build_4.5.4
$ export CC=gcc-4.6.3; export CXX=g++-4.6.3
$ ../gcc-4.5.4/configure --enable-shared --enable-threads=posix --enable-__cxa_atexit \
--enable-clocale=gnu --enable-languages=c,c++,fortran,objc --prefix=/opt/gcc-4.5.4


Explicación de los comandos

tar Jcvf gcc-4.5.4.tar.xz gcc-4.5.4 : Comprimimos el directorio de las fuentes en un sólo paquete que en próximas versiones del compilador servirá de base para aplicar los correspondientes parches de actualización, evitando el tener que bajar los paquetes completos en cada versión nueva del compilador. Los 4 paquetes comprimidos descargados se pueden borrar sin ningún problema.
mkdir gcc-build_4.5.4 : Creamos un directorio de compilación, ya que GCC no permite que se compile directamente en el directorio de las fuentes.
export CC=gcc-4.6.3; export CXX=g++-4.6.3 : Utilizamos la versión reciente compilada de GCC 4.5.4 siguiendo el sistema de utilizar la versión anterior compilada de la serie por encima de la que pertenece la versión que vamos a compilar.
--enable-shared : Compila las librerías compartidas (para entendernos, las *.so).
--enable-threads=posix : Selecciona la librería genérica POSIX/Unix98 para el soporte de hilos.
--enable-__cxa_atexit : Opción necesaria para una correcta compilación de c++.
--enable-clocale=gnu : Evita un error en la generación de las locales, en el caso de que estén incompletas.
--enable-languages=c,c++,fortran,objc : Compila los lenguajes de programación en C, C++, Fortran, y Objetive C.
--prefix=/opt/gcc-4.5.4 : Instala el compilador en /opt/gcc-4.5.4.

Compilación

$ make bootstrap

Parámetros de compilación opcionales

Instalación como root

$ su
# make install
# for i in /opt/gcc-4.5.4/bin/{gcc,g++,gfortran} ; do \
mv $i $i-4.5.4 ; \
done
# mv /opt/gcc-4.5.4/share/man/man1/gcc.1 /opt/gcc-4.5.4/share/man/man1/gcc-4.5.4.1
# mv /opt/gcc-4.5.4/share/man/man1/gfortran.1 /opt/gcc-4.5.4/share/man/man1/gfortran-4.5.4.1

Borrar las locales adicionales instaladas

$ su
# for i in be ca da de el fi fr id ja nl ru sr sv tr tk uk vi zh_CN zh_TW ; do \
rm -rf /opt/gcc-4.5.4/share/locale/$i &> /dev/null ; \
done

Desinstalación como root

1) MODO TRADICIONAL

En el directorio de compilación ejecutamos el siguiente comando como root:

$ su
# make uninstall

2) MODO MANUALINUX

gcc-4.5.4-scripts.tar.gz

$ su
# tar zxvf gcc-4.5.4-scripts.tar.gz
# cd gcc-4.5.4-scripts
# ./Desinstalar_gcc-4.5.4

La desinstalación del compilador no incluye las librerías compartidas (.so) para evitar problemas de dependencias en el caso de que hayamos compilado algún programa con esta versión de GCC.

Copia de Seguridad como root

$ su
# tar zxvf gcc-4.5.4-scripts.tar.gz
# cd gcc-4.5.4-scripts
# ./Respaldar_gcc-4.5.4

Restaurar la Copia de Seguridad como root

$ su
# cd /var/copibin/restaurar_copias
# ./Restaurar_gcc-4.5.4



Configurar el sistema para el uso de GCC 4.5.4

1) /etc/ld.so.conf


Añadimos la ruta a las librerías en el archivo /etc/ld.so.conf.

include ld.so.conf.d/*.conf
/usr/X11R6/lib
/usr/lib
/usr/lib/qt3/lib
/usr/local/lib
/opt/e17/lib
/opt/gcc-4.8.1/lib
/opt/gcc-4.7.3/lib
/opt/gcc-4.6.3/lib
/opt/gcc-4.5.4/lib


Cuando lo hayamos editado y guardado ejecutamos la actualización de la caché de las librerías compartidas,

$ su
# ldconfig -v

2) Añadir la ruta a los binarios y las páginas de manual a nuestro PATH

2a) Variable de entorno PATH de usuario

Editamos el archivo de nuestro home, ~/.bashrc (si no existe lo creamos) y añadimos lo siguiente al final del mismo,

export PATH=/opt/gcc-4.5.4/bin:$PATH
export MANPATH=/opt/gcc-4.5.4/share/man:$MANPATH


Si estamos siguiendo el manual lo añadimos a la variable de entorno anterior,

export PATH=/opt/gcc-4.8.1/bin:/opt/gcc-4.7.3/bin:/opt/gcc-4.6.3/bin:/opt/gcc-4.5.4/bin:$PATH

export MANPATH=/opt/gcc-4.8.1/share/man:/opt/gcc-4.7.3/share/man/opt/gcc-4.6.3/share/man:\
/opt/gcc-4.5.4/share/man:$MANPATH

2b) Variable de entorno PATH del sistema

Si queremos establecer una variable de entorno global del sistema, abrimos un editor de texto y añadimos lo siguiente:

#!/bin/sh

export PATH=/opt/gcc-4.5.4/bin:$PATH
export MANPATH=/opt/gcc-4.5.4/share/man:$MANPATH


Si estamos siguiendo el manual lo añadimos a la variable de entorno anterior,

#!/bin/sh

export PATH=/opt/gcc-4.8.1/bin:/opt/gcc-4.7.3/bin:/opt/gcc-4.6.3/bin:/opt/gcc-4.5.4/bin:$PATH

export MANPATH=/opt/gcc-4.8.1/share/man:/opt/gcc-4.7.3/share/man/opt/gcc-4.6.3/share/man:\
/opt/gcc-4.5.4/share/man:$MANPATH

Lo guardamos con el nombre gcc.sh, y lo instalamos en /etc/profile.d.

$ su
# install -m755 gcc.sh /etc/profile.d

Tenemos que cerrar el emulador de terminal y volverlo a abrir para que la variable de entorno aplicada sea efectiva. Es conveniente guardar una copia de este script para posteriores instalaciones de nuestro sistema. La ventaja de utilizar el directorio /etc/profile.d es que es común a todas las distribuciones y nos evita tener que editar otros archivos del sistema como por ejemplo, /etc/profile.

2c) Lectura de las páginas de manual

$ man gcc-4.5.4
$ man gfortran-4.5.4

3) Uso de GCC 4.5.4

Esto está ampliamente explicado en este apartado, sólo cambia el número de la versión a utilizar,

$ export CC=gcc-4.5.4; export CXX=g++-4.5.4; export {FC,F90,F95,F77}=gfortran-4.5.4



Convivencia de GCC 4.5.3 con GCC 4.5.4

Este apartado sólo está indicado para los que siguen el manual. No tiene sentido ninguno tener 2 versiones de una misma serie del compilador, así que cuando comprobemos que GCC 4.5.4 compila sin ningún problema, desinstalaremos la versión 4.5.3 cuyos scripts pongo a continuación.

gcc-4.5.3-scripts.tar.gz

$ su
# tar zxvf gcc-4.5.3-scripts.tar.gz
# cd gcc-4.5.3-scripts
# ./Desinstalar_gcc-4.5.3

La desinstalación del compilador no incluye las librerías compartidas (.so) para evitar problemas de dependencias en el caso de que hayamos compilado algún programa con esta versión de GCC.




Foro Galería Blog


Página - 1Página - 2

Actualizado el 31-05-2013

Instalar GCC desde cero

Instalar Clang desde ceroInstalar Java en GNU/Linux