Tamaño: 1680
Comentario:
|
Tamaño: 6952
Comentario:
|
Los textos eliminados se marcan así. | Los textos añadidos se marcan así. |
Línea 2: | Línea 2: |
<<TableOfContents>> |
|
Línea 3: | Línea 5: |
'''''"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 compilador predefinido del mundo '''''''GNU/Linux'''.<<BR>> <<BR>> 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.<<BR>> <<BR>> 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 expliqué en la introducción del manual del [[http://manualinux.eu/kernel.html|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 [[http://gcc.gnu.org/fortran/|Fortran]]. Y desde el 13 de marzo de 2015, la instalación del lenguaje [[https://gcc.gnu.org/java/|Java]], que ha sido retirado a partir de '''GCC 7'''."'''''''' ''' | '''''"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 compilador predefinido del mundo '''''''GNU/Linux'''.<<BR>> <<BR>> 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.<<BR>> <<BR>> 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 expliqué en la introducción del manual del [[http://manualinux.eu/kernel.html|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 [[http://gcc.gnu.org/fortran/|Fortran]]. Y desde el 13 de marzo de 2015, la instalación del lenguaje [[https://gcc.gnu.org/java/|Java]], que ha sido retirado a partir de '''GCC 7'''."'' ''' ''' |
Línea 5: | Línea 7: |
'''Referencia: ''' | == Librarias requeridas: == Una sería de librerías requeridas para poder lograr la implementación de GCC son necesarias, entre las que encontramos: |
Línea 7: | Línea 10: |
'''http://manualinux.eu/gcc.html ''' | * GMP - the GNU Multiple Precision Arithmetic Library. * MPFR - the GNU Multiple-precision floating-point rounding library, que depende de GMP. * MPC - the GNU Multiple-precision C library. con dependencia en GMP and MPFR. * ISL - Integer Set Library Todas estás librerías serán instaladas en el directorio /opt/util_compiler, por lo que los prefix requeridos deben apuntar a esa ruta. === GMP === Descargar el paquete de gmp. Actualmente se está utilizando la versión 6.1.0 {{{ wget ftp://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.1.0.tar.bz2 }}} Una vez descargado ejecutamos los siguientes pasos: {{{ bunzip2 gmp-6.1.0.tar.bz2 tar xvf gmp-6.1.0.tar cd gmp-6.1.0 ./configure --disable-shared --enable-static --prefix=/opt/util_compiler/ make make check }}} Luego instalar como súper usuario (root) {{{ make install }}} === MPFR === Descargar la versión actual (3.1.4) de MPFR desde la siguiente urlftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-3.1.4.tar.bz2 usando wget, {{{ wget ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-3.1.4.tar.bz2 }}} Ejecutar los siguientes pasos: {{{ bunzip2 mpfr-3.1.4.tar.bz2 tar xvf mpfr-3.1.4.tar cd mpfr-3.1.4 ./configure --disable-shared --enable-static --prefix=/opt/util_compiler --with-gmp=/opt/util_compiler make && make check }}} Y como super usuario {{{ make install }}} === MPC === Descargar e instalar la versión 1.0.3 siguiendo los siguientes pasos: {{{ wget ftp://gcc.gnu.org/pub/gcc/infrastructure/mpc-0.8.1.tar.gz tar zxvf mpc-1.0.3.tar.gz cd mpc-1.0.3 ./configure --disable-shared --enable-static --prefix=/opt/util_compiler --with-gmp=/opt/util_compiler --with-mpfr=/opt/util_compiler make && make check }}} Como usuario root: {{{ make install }}} === ISL === La versión a utilizar será 0.16.1 {{{ wget ftp://gcc.gnu.org/pub/gcc/infrastructure/isl-0.16.1.tar.bz2 ./configure --with-gmp-prefix=/opt/util_compiler --disable-shared --enable-static --prefix=/opt/util_compiler make }}} Como usuario root: {{{ make install }}} == GCC 6.4.0 == Descargamos desde la url https://ftp.gnu.org/gnu/gcc/gcc-6.4.0/gcc-6.4.0.tar.xz utilizando wget y descomprimimos {{{ https://ftp.gnu.org/gnu/gcc/gcc-6.4.0/gcc-6.4.0.tar.xz tar xvf gcc-6.4.0.tar.xz }}} Procedemos a compilar: {{{ mkdir build-gcc cd build-gcc ../gcc-6.4.0/configure --enable-shared --enable-threads=posix --enable-__cxa_atexit \ --enable-clocale=gnu --enable-languages=fortran,objc \ --prefix=/path/to/install --disable-multilib make }}} '''Explicación de los comandos'''''' ''' * ''' mkdir build-gcc:''' 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. * '''--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 Fortran, Java, y Objetive C, además de los predefinidos, C y C++. También está la opción de agregar el lenguaje Java, para para el caso no es necesario. * '''--disable-multilib:''' Se deshabilita la opción de multilibrerías, por ejemplo x32 y x64 en el mismo equipo. * ''' --prefix=/path/to/install:''' Instala el compilador en la ruta que hemos definid. '''Opcionales:''' * '''--enable-java-awt=gtk:''' Añade el soporte de AWT con GTK+ como librería de interfaz gráfica a Libgcj. (opcional caso de implementar gcc-java). * '''--disable-bootstrap:''' Si por la razón que sea, tenemos que volver a recompilar el paquete, utilizando el mismo compilador de la versión que vamos a instalar, añadiendo esta opción evitaremos que los lenguajes C y C++ se recompilen a sí mismos, y anularemos el proceso predefinido de compilación en tres fases. Si la versión utilizada es de la misma serie, como es en este caso en el manual, también se puede utilizar esta opción. Realizar antes una copia de seguridad de la versión instalada, porque la instalación de la nueva versión sobreescribirá los archivos de la misma. * '''--with-default-libstdcxx-abi=gcc4-compatible:''' Añadiendo esta opción, evitamos tener que añadir la macro -D_GLIBCXX_USE_CXX11_ABI=0 a la variable de entorno CXXFLAGS, para poder compilar código escrito en C++ de forma indistinta con GCC 5 y superiores, o [[http://manualinux.eu/clang.html|Clang]], compatibilidad que se rompió a partir de la versión 5 de GCC, al introducir una nueva [[https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html|ABI]] en Libstdc++. El [[http://reviews.llvm.org/D18035#381281|parche]] no oficial existente, ha sido aceptado por los programadores de Clang, para la versión 3.9.0, pero dado lo experimental del mismo, es muy recomendable seguir utilizando esta opción. Referencia: ''' ''' __http://manualinux.eu/gcc.html ''' ''' __ |
Instalar GCC
Tabla de Contenidos
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 compilador predefinido 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 expliqué 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. Y desde el 13 de marzo de 2015, la instalación del lenguaje Java, que ha sido retirado a partir de GCC 7."
Librarias requeridas:
Una sería de librerías requeridas para poder lograr la implementación de GCC son necesarias, entre las que encontramos:
- GMP - the GNU Multiple Precision Arithmetic Library.
- MPFR - the GNU Multiple-precision floating-point rounding library, que depende de GMP.
- MPC - the GNU Multiple-precision C library. con dependencia en GMP and MPFR.
- ISL - Integer Set Library
Todas estás librerías serán instaladas en el directorio /opt/util_compiler, por lo que los prefix requeridos deben apuntar a esa ruta.
GMP
Descargar el paquete de gmp. Actualmente se está utilizando la versión 6.1.0
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.1.0.tar.bz2
Una vez descargado ejecutamos los siguientes pasos:
bunzip2 gmp-6.1.0.tar.bz2 tar xvf gmp-6.1.0.tar cd gmp-6.1.0 ./configure --disable-shared --enable-static --prefix=/opt/util_compiler/ make make check
Luego instalar como súper usuario (root)
make install
MPFR
Descargar la versión actual (3.1.4) de MPFR desde la siguiente urlftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-3.1.4.tar.bz2 usando wget,
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-3.1.4.tar.bz2
Ejecutar los siguientes pasos:
bunzip2 mpfr-3.1.4.tar.bz2 tar xvf mpfr-3.1.4.tar cd mpfr-3.1.4 ./configure --disable-shared --enable-static --prefix=/opt/util_compiler --with-gmp=/opt/util_compiler make && make check
Y como super usuario
make install
MPC
Descargar e instalar la versión 1.0.3 siguiendo los siguientes pasos:
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/mpc-0.8.1.tar.gz tar zxvf mpc-1.0.3.tar.gz cd mpc-1.0.3 ./configure --disable-shared --enable-static --prefix=/opt/util_compiler --with-gmp=/opt/util_compiler --with-mpfr=/opt/util_compiler make && make check
Como usuario root:
make install
ISL
La versión a utilizar será 0.16.1
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/isl-0.16.1.tar.bz2 ./configure --with-gmp-prefix=/opt/util_compiler --disable-shared --enable-static --prefix=/opt/util_compiler make
Como usuario root:
make install
GCC 6.4.0
Descargamos desde la url https://ftp.gnu.org/gnu/gcc/gcc-6.4.0/gcc-6.4.0.tar.xz utilizando wget y descomprimimos
https://ftp.gnu.org/gnu/gcc/gcc-6.4.0/gcc-6.4.0.tar.xz tar xvf gcc-6.4.0.tar.xz
Procedemos a compilar:
mkdir build-gcc cd build-gcc ../gcc-6.4.0/configure --enable-shared --enable-threads=posix --enable-__cxa_atexit \ --enable-clocale=gnu --enable-languages=fortran,objc \ --prefix=/path/to/install --disable-multilib make
Explicación de los comandos
mkdir build-gcc: 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.
--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 Fortran, Java, y Objetive C, además de los predefinidos, C y C++. También está la opción de agregar el lenguaje Java, para para el caso no es necesario.
--disable-multilib: Se deshabilita la opción de multilibrerías, por ejemplo x32 y x64 en el mismo equipo.
--prefix=/path/to/install: Instala el compilador en la ruta que hemos definid.
Opcionales:
--enable-java-awt=gtk: Añade el soporte de AWT con GTK+ como librería de interfaz gráfica a Libgcj. (opcional caso de implementar gcc-java).
--disable-bootstrap: Si por la razón que sea, tenemos que volver a recompilar el paquete, utilizando el mismo compilador de la versión que vamos a instalar, añadiendo esta opción evitaremos que los lenguajes C y C++ se recompilen a sí mismos, y anularemos el proceso predefinido de compilación en tres fases. Si la versión utilizada es de la misma serie, como es en este caso en el manual, también se puede utilizar esta opción. Realizar antes una copia de seguridad de la versión instalada, porque la instalación de la nueva versión sobreescribirá los archivos de la misma.
--with-default-libstdcxx-abi=gcc4-compatible: Añadiendo esta opción, evitamos tener que añadir la macro -D_GLIBCXX_USE_CXX11_ABI=0 a la variable de entorno CXXFLAGS, para poder compilar código escrito en C++ de forma indistinta con GCC 5 y superiores, o Clang, compatibilidad que se rompió a partir de la versión 5 de GCC, al introducir una nueva ABI en Libstdc++. El parche no oficial existente, ha sido aceptado por los programadores de Clang, para la versión 3.9.0, pero dado lo experimental del mismo, es muy recomendable seguir utilizando esta opción.
Referencia:
http://manualinux.eu/gcc.html