2011-01-16 23 views
8

Actualmente estoy escribiendo una biblioteca y estoy considerando pasar de GCC 4.1.2 a 4.5.2 (última versión) de GCC. Si compilo mi código en una biblioteca estática, ¿puedo asumir que la compatibilidad del compilador (obviamente en el mismo sistema operativo) no debería ser un problema para los clientes?C++ Compatibilidad de biblioteca

EDITAR Para aclarar aún más: si doy un cliente de una biblioteca vinculada estáticamente compilado con gcc 4.5.2, ¿Qué límites tiene este lugar en usuarios de esta biblioteca en cuanto a que el compilador y la versión que debe utilizar?

+0

Si entendí bien tu pregunta ... entonces sí. – Arunmu

+0

He aclarado mi pregunta, vea Editar. – Graeme

Respuesta

7

encontré con este que creo que responde a mi pregunta de http://gcc.gnu.org/bugs/#nonbugs:

ABI cambia El ++ aplicación binaria interfaz de C (ABI) consta de dos componentes: el primero define cómo los elementos de las clases son presentado, cómo se llaman las funciones , cómo se desglosan los nombres de la función , etc .; la segunda parte se ocupa de las partes internas de los objetos en libstdC++. Aunque nosotros nos esforzamos por un ABI no cambiante, hasta el momento hemos tenido que modificarlo con cada versión principal de . Si cambia el compilador a una versión principal diferente , debe recompilar todas las bibliotecas que contienen código C++. Si no lo hace corre el riesgo de obtener errores del enlazador o programas que funcionan mal. Algunas de nuestras bibliotecas de soporte de Java también contienen código C++, por lo que es posible que desee recompilar todas las bibliotecas para estar seguro. No es necesario para recompilar si ha cambiado a una versión de corrección de errores de la misma versión del compilador ; Las versiones de reparación de errores son cuidadosas para evitar cambios de ABI. Consulte también la sección de compatibilidad del manual GCC .

Observación: Una versión principal se designa por un cambio a la primera o segunda componente del número de versión de dos o tres partes. Una versión menor (corrección de errores) se designa mediante un cambio a , el tercer componente solamente. Por lo tanto, GCC 3.2 y 3.3 son versiones principales, mientras que 3.3.1 y 3.3.2 son versiones corregidas de errores para GCC 3.3. Con la serie 3.4, estamos presentando un nuevo esquema de nombres; el primer lanzamiento de esta serie es 3.4.0 en lugar de solo 3.4.

A partir de esto, según tengo entendido, tendré que asegurarme de que los clientes vinculen mi biblioteca con una versión compatible de gcc de gran lanzamiento.

1

No importa si proporciona una biblioteca estática o una biblioteca dinámica, los usuarios aún necesitarán usar un compilador/enlazador compatible para vincularlo. Por lo general, cuando GCC realiza un cambio de ABI, ofrecen un interruptor que se puede configurar para usar el antiguo ABI. Sé que lo hicieron cuando pasaron de 3.x a 4.x e incluso un par de lanzamientos dentro de la serie 4.x.