Gentoo Logo

Guía de actualización de GCC en Gentoo Linux

Contenido:

1.  Inicio rápido

Introducción

Esta guía trata la actualización del GCC. Cambiar a una versión más antigua podría traer efectos secundarios indeseados. Por favor refiérase a la sección Solucionando problemas para algunos de los problemas frecuentemente reportados.

La siguiente sección da una introducción rápida a las actualizaciones del GCC (y lo fáciles que son). Si desea leer el razonamiento completo detrás de las actualizaciones del GCC, por favor continue con Explicación de Actualizaciones del GCC.

Versión corta

Si está actualizando el GCC, no necesita hacer más que cambiar de versión de compilador y reconstruir libtool:

Listado de Código 1.1: Cambiar de versión del GCC

# emerge -u gcc
# gcc-config -l
[1] i686-pc-linux-gnu-4.4.5 *
[2] i686-pc-linux-gnu-4.5.3

# gcc-config 2
# env-update && source /etc/profile
# emerge --oneshot libtool

Si está actualizando el GCC de una versión anterior a la 3.4.0 (de la serie 3.x) ó 4.1, tendrá que ejecutar revdep-rebuild también:

Listado de Código 1.2: Actualizando una versión no compatible a futuro del GCC

# revdep-rebuild --library libstdc++.so.5

¡Listo! Ahora a disfrutar del compilador nuevo.

2.  Explicación de Actualizaciones del GCC

Introducción

Las actualizaciones del GCC siempre han sido rodeadas de un aura de misterio, con sugerencias que van desde "No hace falta hacer nada" hasta "Tendrás que reconstruir el sistema completo, dos veces". La mayoría de estas medias informaciones (FUD) vienen de la confusión que rodea las incompatibilidades del ABI. Antes, unas palabras sobre libtool.

libtool y fix_libtool_files.sh

Las instalaciones anteriores del GCC en Gentoo requerían ejecutar un comando específico llamado fix_libtool_files.sh. Hace algún tiempo, la ejecución de este comando ha sido integrado en la instalación misma del paquete (a través del eclass llamado toolchain), así que ya no es necesario que los usuarios ejecuten este comando.

La razón para la cual necesitamos reconstruir libtool luego de actualizar el GCC es dada su función principal: libtool reune un conjunto de herramientas que agregan código específico según plataforma en un interfaz genérico para construir aplicaciones con librerías compartidas sin tener que manejar aspectos específicos de cada cada una. Para que realice su función correctamente, el guión libtool usa varios puntos en la librería con información fija acerca de versiones del GCC.

Cambios en el ABI

Un ABI, Interfaz Binaria para Aplicaciones (en inglés Application Binary Interface), es un conjunto de convenciones usadas por todas las herramientas que manejan representaciones binarias de los programas, incluyendo compiladores, ensambladores, enlazadores y soporte al momento de ejecución (fuente: GCC Binary Compatibility). Al cambiar el ABI usado para aplicaciones binarias y librerías, existirá el riesgo de obtener errores de enlazado o programas funcionando incorrectamente si no se reconstruyen todas las librerías que usen el código C++. Si, C++, ya que la mayoría de las incompatibilidades ocurren en el ABI de C++. Por esto usamos revdep-rebuild con la librería libstdc++.so.5.

Listado de Código 2.1: Reconstruyendo aplicaciones enlazadas a libstdc++.so.5

# revdep-rebuild --library libstdc++.so.5

Asi que, ¿por qué se requiere esto para los GCC hasta la versión 3.4.0/4.1? A partir de estas versiones, GCC usa un ABI compatible a futuro, que elimina la necesidad de reconstruir las aplicaciones y librerías. Por supuesto que no se pueden dar garantía indefinidamente, pero cuando ocurra nuevamente una incompatibilidad, definitivamente lo documentaremos aquí ;-) en cuyo caso la versión del libstdc++.so probablemente aumentará.

Reconstruyendo todo

Algunos juran que al aparecer una nueva versión del GCC, se debe reconstruir hasta el último paquete del sistema. Por supuesto, esto no tiene sentido, ya que de todas formas hay muchas aplicaciones que no usan el GCC en su proceso de construcción e instalación y por ende nunca serían afectados por estos cambios.

Sin embargo, esto no significa que estén completamente equivocados: las versiones recientes del GCC suelen incluir soporte mejorado para los conjuntos de instrucciones de los procesadores, lo que podría influenciar el desempeño de algunas aplicaciones positivamente. Aunque se estima que estas mejoras sean generalmente marginales, en algunos casos (especialmente en aplicaciones que usan intensivamente el CPU) podrían traer notables mejoras.

Existen también casos conocidos donde un conjunto de paquetes deben ser construidos con el mismo compilador. Aunque la versión de estos paquetes suelen ser aumentada simultáneamente con el compilador (de forma que sean construidos con la misma versión del GCC) el escoger selectivamente reinstalaciones de algunos de estos paquetes puede traer problemas. Los paquetes de qt-* son un ejemplo de esto.

3.  Solucionando problemas

libstdc++.so.6: version `GLIBCXX_3.4.15' not found

Durante las actualizaciones podría tropezarse con un error como el siguiente:

Listado de Código 3.1: GLIBCXX_x.y.z not found

cmake_bootstrap_28021_test: /usr/lib/gcc/i486-pc-linux-gnu/4.1.2/libstdc++.so.6:
version `GLIBCXX_3.4.11' not found 

Esto significa que está intentando construir un paquete con una versión del GCC más antigua que el usado para construir algunas de sus librerías dependientes. ¿Recuerde cuando dijimos que el ABI C++ era compatible a futuro? Esto es cierto, pero asegura solamente que versiones más recientes (o iguales) del GCC pueden ser utilizadas para construir aplicaciones y librerías enlazadas (en comparación con la versión del GCC usado para construir esas librerías).

¿Cuáles paquetes se conocen que requieren reconstrucción?

La siguiente table lista los paquetes, que de estar instalados necesitarían ser reconstruidos y por que.

Paquete Reconstrucción requerida por ...
sys-devel/libtool la aplicación libtool usa trayectorias a las librerías internas del GCC codificadas de manera fija
dev-lang/ghc la aplicación ghc usa trayectorias a las librerías internas del GCC codificadas de manera fija

4.  Recursos

Guías Gentoo y Recursos



Imprimir

Página actualizada 15 de octubre, 2011

Sumario: Este documento guiará al usuario en el proceso de actualización del GCC.

Sven Vermeulen
Autor

John Christian Stoddart
Traductor

Donate to support our development efforts.

Copyright 2001-2013 Gentoo Foundation, Inc. Questions, Comments? Contact us.