martes, abril 20, 2004

libstdc++, gcc y compatibilidad binaria

Una de las peoreos cosas que te puede pasar en un Linux es un problema con el ABI (Aplication Binary Interface) y el C++. En el desarrollo del gcc se suelen producir cambios en el ABI de C++, que dan lugar a incompatibilidades en función de la versión del compilador que estés usando. Estas incompatibilades se tralaslanda a las librerias dinámicas creadas por estos compiladores y contra las cuales se enlazan los ejecutables, en especial porque el compilador de C++ se apoya en libstdc++ para implementar la libreria estandar de C++ - y normalmente, las versiones de esta libreria no ofrecen compatibilidad binaria. Un ejemplo: MapXtreme 4.7 y Suse 9.0 . El instalador de este programa - puro java - tiene un jre (java runtime enviroment) compilado con el gcc-2.9x. El compilador de C++ usa la libreria dinámica libstdc++v2 para implementar las funciones de la libreria estándar. Sin embargo, Suse 9.0 tiene el gcc-3.0 y usa la libstdc++v3, la cual no es compatible binario con la anterior. La solución es utilizar una libreria de una versión anterior de Redhat o Suse, compilada con dicho compilador, lo cual no deja de ser un malabarismo para salir del paso.

No hay comentarios: