Inicio > Gentoo, Programación > Actualizando a gcc 4.4 en Gentoo

Actualizando a gcc 4.4 en Gentoo

Miércoles, 9 de septiembre de 2009 Dejar un comentario Ir a comentarios

Gentoo

Ultima actualización 10/09/2009

Ante la necesidad, o mejor dicho, el placer de poder utilizar la última versión de openmp sobre todo para poder usar variables sin signo en los bucles for paralelizados, hoy he tenido que actualizar a la versión (4.4) del compilador GNU. La documentación oficial de gentoo está un poco obsoleta y no deja claro del todo que pasos hay que seguir en cada caso, por lo que os dejo aquí una breve entrada sobre como actualizar vuestro compilador y recompilar el sistema para aprovechar las nuevas mejoras introducidas. Según he leído, el rendimiento ofrecido por la nueva versión del compilador incrementa en muchas aplicaciones hasta un 4% sin tener que tocar nada de código (esto parece ser debido a una nueva forma de manejar los registros del procesador).

Lo primero de todo es indicarle al sistema que queremos arriesgarnos a instalar una versión de gcc que no está considerada como estable, por lo que tendremos que poner el keyword al paquete gcc adecuado en el fichero /etc/profile/package.keywords. En mi caso :

sys-devel/gcc ~amd64

Después de esto pasamos actualizar el mismo mediante el comando emerge -uav gcc. Aquí tendréis que tener un poco de paciencia ya que compilar un compilador no es algo muy liviano que digamos. Además si como ha sido mi caso, teníais la versión 4.3.2 del compilador instalado en vuestro sistema, automáticamente se actualizará a la versión 4.3.4 y posteriormente instalará la versión 4.4.1, por lo que tendréis dos versiones de gcc conviviendo en vuestro equipo. Esto es así, porque al no tratarse de una versión de corrección de bugs, en donde varia solo el último dígito, sino que se añaden nuevas funcionalidades, lo que supone una variación del segundo dígito, hay que preservar las dos versiones para evitar problemas. De esta forma el usuario final es el que decide si remover la versión anterior del compilador o no. Una vez que el sistema instala la nueva versión de gcc, ejecutamos gcc-config para comprobar las versiones existentes ahora en nuestro sistema:

gcc-config -l
 [1] x86_64-pc-linux-gnu-4.3.4 *
 [2] x86_64-pc-linux-gnu-4.4.1

El siguiente paso consiste en indicarle al sistema que queremos establecer la última versión del compilador, como la versión por defecto:

gcc-config x86_64-pc-linux-gnu-4.4.1

Por último recompilamos el paquete libtool usando la opción de emerge oneshot para que no se añada el paquete a la al conjunto de paquetes @world :

emerge --oneshot -av libtool

No es necesario recompilar los paquetes en @system y @world, debido a que la ABI no ha sufrido cambios desde gcc 4.3 a 4.4. Sin embargo, si lo deseas puedes recompilar dichos paquetes para aprovechar las ventajas del nuevo compilador mediante los siguientes comandos:

emerge -eav system
emerge -eav world

Después de recompilar el sistema es recomendable ejecutar el comando revdep-rebuild para comprobar que no hay ningún enlace a librerías roto, o en caso de que lo haya que se repare.

En el último enlace que os dejo abajo se comenta la posibilidad de utilizar el nuevo flag USE graphite que optimiza aún más el código, pero por lo que he leído parece que algunas personas tienen problemas con esta nueva opción.

[actualización] Problemas con boost

Debido precisamente al problema que os comento aquí, la librería boost que está compuesta mayormente por clases de plantilla se ve afectada. Para solucionar el problema con esta librería necesitaremos instalar la versión marcada como no estable de boost. Para ello añadimos las siguientes líneas en nuestro /etc/portage/package.keywords:

dev-libs/boost ~amd64
dev-util/boost-build ~amd64
app-admin/eselect-boost ~amd64

Después de esto, primero eliminamos la versión anterior de boost con emerge -C boost y después lo instalamos de nuevo.

[actualización] Problemas con gdb y libtool

Me he encontrado con otro grabe problema a la hora de intentar depurar programas. Cuando hacía uso de libtool para linkar un programa con alguna librería después no podía depurar dicho programa, el depurador me mostraba mensajes como los siguientes:

libtool --mode=execute gdb a.out
 GNU gdb 6.8
 Copyright (C) 2008 Free Software Foundation, Inc.
 License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
 This is free software: you are free to change and redistribute it.
 There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
 and "show warranty" for details.
 This GDB was configured as "x86_64-pc-linux-gnu"...
 (gdb) run
 Starting program: /home/pipo/Trabajo/c++-pruebas/a.out
 [Thread debugging using libthread_db enabled]
 Error while reading shared library symbols:
 find_new_threads_callback: cannot get thread info: generic error
 find_new_threads_callback: cannot get thread info: generic error
 (gdb) quit

El problema parece estar en un problema de gcc 4.4.x con la versión estable de glibc en gentoo. Actualizando glibc a su versión 2.10.1 se soluciona el problema. En este enlace podéis encontrar más información al respecto.

Enlaces relacionados:

GD Star Rating
loading...
Share
  1. Sin comentarios aún.
  1. Sin trackbacks aún.