Pregunta

Por lo que he entendido, no es posible bibliotecas de enlace que utilizan diferentes versiones de la interfaz binaria de aplicación de GCC (ABI). ¿Hay ABI cambios en cada versión de GCC? ¿Es posible vincular una biblioteca construida con 4.3.1 si uso, por ejemplo, GCC 4.3.2? ¿Hay una matriz de algún tipo que enumera todas las formas en que se pueden combinar versiones del CCG?

¿Fue útil?

Solución

Los oficiales ABI página apunta a un ABIcheck . Esta herramienta puede hacer, lo que quiere.

Otros consejos

Desde gcc-3.4.0, el ITB es compatible hacia adelante. ES DECIR. una biblioteca hecha usando una versión anterior puede estar vinculado con una más reciente y debería funcionar (lo contrario no lo hace). Obviamente, puede haber errores, pero sólo hay un mencionado en la documentación: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33678

Uf, uff.
¿Cómo puede saber lo que gcc compila un binario dado? Aquí está el aviso de la muerte de gcc-4.7.2-1-mingw32.README.txt:

aviso de incompatibilidad binaria!

El C y C ++ ABI cambiar en GCC 4.7.0, lo que significa, en general, no se puede binarios compilados enlace junto con esta versión del compilador y con versiones antes de GCC 4.7.0. En particular:

  • La opción -mms-campos de bits está habilitado por defecto, lo que significa que el diseño de campo de bits sigue la convención del compilador de Microsoft.

  • funciones de clase C ++ miembros ahora siguen la convención de llamada __thiscall.

  • El compilador ahora se supone que la persona que llama aparece la pila para el argumentos implícitos que apuntan a un valor de retorno agregada. esto afecta funciones de volver estructuras por valor, como el tipo de matemáticas complejas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top