Pregunta

No es muy difícil de romper binario compatibilidad con versiones anteriores de una biblioteca DSO / compartido con una interfaz de C ++. Dicho esto, hay una herramienta de análisis estático, que puede ayudar a detectar tales descansos ABI, si se administra dos conjuntos diferentes de archivos de cabecera: los de un estado anterior de la DSO y las del estado actual (y tal vez DSO también)? Ambas sugerencias de productos libres y comerciales son bienvenidos.

Si también podría advertir sobre las malas prácticas, por ejemplo, funciones en línea y los parámetros de la función de impago, de interfaces de DSO, sería muy bueno.

¿Fue útil?

Solución

Asumo que está familiarizado con este tutorial: binarios problemas de compatibilidad con C ++ , si no es leerlo!

He oído hablar de esta herramienta: http://ispras.linuxbase.org/index.php/ABI_compliance_checker , sin embargo, nunca probado o uno usado, así que no tiene opinión.

También puede interesarle: Creación Biblioteca con compatible con versiones anteriores ABI que los usos Boost

Otros consejos

abi-cumplimiento-checker - una herramienta para comprobar hacia atrás binario / source- compatibilidad nivel de una biblioteca de C / C ++ compartido (DSO):

  

una herramienta para comprobar binario y a nivel de fuente compatibilidad con versiones anteriores de la biblioteca de una C / C ++. La herramienta comprueba los archivos de cabecera y bibliotecas compartidas de versiones antiguas y nuevas y analiza los cambios en la API y ABI (ABI = API + compilador de ABI) que pueden romper binaria y / o fuente de compatibilidad: los cambios en la llamada pila, cambios v-mesa, símbolos eliminados , campos renombrados, etc.

     

introducir descripción de la imagen aquí

iCheck - C interfaz corrector ABI / API:

  

una herramienta para comprobar estáticamente interfaces de C para API y cambios ABI. Todos los cambios en las declaraciones de tipos que pueden causar cambios ABI deben ser detectados, junto con la mayoría de los cambios en la API.   iCheck es para uso con las bibliotecas, como un método de prevención de ABI deriva.

shlib-compat ABI - comprobador de compatibilidad para las bibliotecas compartidas con versiones de símbolos:

  

usos fichero shlib-compat empequeñecen símbolos de depuración para volver a crear y comparar las definiciones de exportado   símbolos, incluyendo los argumentos de funciones y tipos estructurales.

También usted puede estar interesado en la Linux aguas arriba de seguimiento y Linux abi rastreador servicios. Ambos son accionados por la herramienta de abi-cumplimiento-corrector.

Me recuerda al trabajo que utilizan GCC XML para probar la compatibilidad binaria. Básicamente lo que hace es generar una representación XML del árbol de objetos compilador. La teoría es que si el XML es equivalente, que la compatibilidad binaria se han mantenido.

La única forma segura de hacer esto es exportar la biblioteca con una interfaz C. Una biblioteca de C ++ sólo es compatible con el compilador utiliza para compilarlo.

Nuestra herramienta C ++ inteligente diferenciador compara dos archivos de origen y las diferencias en cuanto a los informes de las estructuras del lenguaje (identificadores, expresiones, declaraciones, ...) y acciones de edición posibles (insertar, eliminar, mover, copiar, cambiar-identificador, ...).

No responde a la pregunta ABI directamente, pero la información que proporciona podría ser bastante útil. Un ejemplo discutido en otra respuesta es de cambio de tipo de retorno de struct {a, b} a struct {b, a} . SmartDifferencer informaría de que a se ha movido. (Nota: una herramienta de diferencias regulares informaría la línea que contiene la definición de estructura se ha cambiado, así que tipo de obtener la misma información, pero SmartDifference ignorará los cambios en los espacios en blanco / trazado y comentarios, también, que produce menos ruido conceptual).

Lo que ninguno de estas herramientas se informe es el cambio de la definición de un typedef, que se encuentra en otro archivo de cabecera. Pero entonces presumiblemente se podría comparar todos los archivos de cabecera involucrados. Si no quieres hacer esto manualmente, cualquier herramienta que está en uso deben incluirse esencialmente un C ++ completo programa de análisis, resolución de nombres, y debe comparar las declaraciones de equivalencia. Otro cartel sugiere que más o menos la respuesta: la comparación de la producción GCCXML de equivalencia. No estoy seguro de lo fácil que es en la práctica; no puede ser sólo "son los archivos XML de la misma con el fin?".

ABI - Aplicación interfaz binaria se reduce a la forma en que el compilador traduce el código fuente en las instrucciones reconocibles máquina. la misma línea de fuente puede ser traducido a diferente flujo de bytes, en el programa final.

un analizador estático se ejecuta sobre el código fuente no será capaz de predecir cómo el compilador lo traducirá. esa decisión se toma en el compilador de codificación o la configuración. así que no creo que un analizador estático será de ayuda para usted en este caso.

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