Compatibilidad con GCC ABI


Por lo que he entendido, no es posible vincular bibliotecas que utilizan diferentes versiones de la Interfaz Binaria de Aplicaciones (ABI) de GCC. ¿Hay cambios ABI 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 puedo combinar las versiones de GCC?

Author: linuxbuild, 2010-05-10

3 answers

La página oficial de ABI apunta a un ABIcheck. Esta herramienta puede hacer, lo que quieras.

 11
Author: ablaeul,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-31 10:03:28

Desde gcc-3.4.0, el ABI es compatible hacia adelante. Es decir, una biblioteca hecha usando una versión anterior puede ser enlazada con una nueva y debería funcionar (lo contrario no). Obviamente, podría haber errores, pero solo hay uno mencionado en la documentación: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33678

 17
Author: AProgrammer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-10 13:14:39

Ugh, yikes.
¿Cómo puedes saber qué gcc compiló un binario dado? Aquí está el death notice from gcc-4.7.2-1-mingw32.LÉEME.txt:

Aviso de incompatibilidad binaria!

El ABI de C y C++ cambió en GCC 4.7.0, lo que significa que en general no puede enlazar los binarios compilados con esta versión del compilador y con versiones anteriores a GCC 4.7.0. En particular:

  • La opción-mms-bitfields está habilitada de forma predeterminada, lo que significa que el diseño del campo de bits sigue la convención del compilador de Microsoft.

  • Las funciones miembro de clase de C++ ahora siguen la convención de llamada _ _ thiscall.

  • El compilador ahora asume que el llamante hace estallar la pila para el argumentos implícitos que apuntan a un valor de retorno agregado. Esto afecta funciones que devuelven estructuras por valor, como el tipo matemático complejo.

 2
Author: user3603401,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-05-07 14:48:01