InglésFrancésEspañol

Ad


icono de página de OnWorks

abicompat - Online en la nube

Ejecute abicompat en el proveedor de alojamiento gratuito de OnWorks sobre Ubuntu Online, Fedora Online, emulador en línea de Windows o emulador en línea de MAC OS

Este es el comando abicompat que se puede ejecutar en el proveedor de alojamiento gratuito de OnWorks utilizando una de nuestras múltiples estaciones de trabajo en línea gratuitas, como Ubuntu Online, Fedora Online, emulador en línea de Windows o emulador en línea de MAC OS.

PROGRAMA:

NOMBRE


abicompat - comprobar la compatibilidad ABI

abicompat comprueba que una aplicación que se vincula con una biblioteca compartida determinada todavía está
ABI compatible con una versión posterior de esa biblioteca. Si la nueva versión del
biblioteca introduce una incompatibilidad ABI, luego abicompat le sugiere al usuario qué es exactamente
esa incompatibilidad es.

INVOCACIÓN


abicompat [opciones] [ ]

CAMPUS


· --ayuda

Muestre una pequeña ayuda sobre el comando y salga.

· --versión | -v

Muestre la versión del programa y salga.

· --lista-indefinidos-símbolos | -u

Muestre la lista de símbolos indefinidos de la aplicación y salga.

· --show-base-nombres | -b

En el informe resultante emitido por la herramienta, esta opción hace que la aplicación y
se hará referencia a las bibliotecas únicamente por sus nombres básicos; no por un nombre absoluto completo. Esta
puede ser útil para usar en scripts que quieran comparar los nombres de la aplicación y
bibliotecas independientemente de sus nombres de directorio.

· --app-depuración-info-dir

Establezca la ruta al directorio en el que se encuentra la información de depuración de la aplicación.
se supone que debe ser distribuido. Esto es útil para los binarios de la aplicación para los que la depuración
La información está en un conjunto de archivos separado.

· --lib-debug-info-dir1

Establezca la ruta al directorio en el que se encuentra la información de depuración de la primera versión.
de la biblioteca compartida se supone que está distribuida. Esto es útil para la biblioteca compartida.
binarios para los que la información de depuración se encuentra en un conjunto de archivos separado.

· --lib-debug-info-dir2

Establezca la ruta al directorio en el que se encuentra la información de depuración de la segunda versión.
de la biblioteca compartida se supone que está distribuida. Esto es útil para la biblioteca compartida.
binarios para los que la información de depuración se encuentra en un conjunto de archivos separado.

· --locs-no-presentación
No mostrar información sobre en qué lugar del segundo compartido bibliotecas el respectivo
se cambió el tipo.

· --modo débil

Esto desencadena el modo débil de abicompat. En este modo, solo una versión del
Se requiere biblioteca. Es decir, abicompat se invoca así:

abicompat --modo débil

Tenga en cuenta que --modo débil La opción incluso se puede omitir si solo una versión del
se proporciona la biblioteca, junto con la aplicación; en ese caso, abicompat automáticamente
conmuta para operar en modo débil:

abicompat

En este modo débil, los tipos de funciones y variables exportadas por la biblioteca y
consumido por la aplicación (como en, los símbolos de estas funciones y variables
no están definidos en la aplicación y están definidos y exportados por la biblioteca)
en comparación con la versión de estos tipos que espera la aplicación. Y si estos
dos versiones de tipos son diferentes, abicompat le dice al usuario cuáles son las diferencias
son.

En otras palabras, en este modo, abicompat comprueba que los tipos de funciones y
las variables exportadas por la biblioteca significan lo mismo que la aplicación
espera, en lo que respecta a la ABI.

Tenga en cuenta que en este modo, abicompat no detecta funciones o variables exportadas
(símbolos) que espera la aplicación pero que se eliminan de la biblioteca.
Por eso se llama débil modo.

DEVOLUCION VALORES


El código de salida del abicompat comando es 0 si el ABI de los binarios es
comparados son iguales o distintos de cero si difieren o si la herramienta encontró un error.

En el último caso, el código de salida es un campo de bits de 8 bits de ancho en el que cada bit tiene un
significado específico.

El primer bit, de valor 1, denominado ABIDIFF_ERROR significa que hubo un error.

El segundo bit, de valor 2, denominado ABIDIFF_USAGE_ERROR significa que hubo un error en la forma
el usuario invocó la herramienta. Podría configurarse, por ejemplo, si el usuario invoca la herramienta
con un modificador de línea de comando desconocido, con un número o argumento incorrecto, etc. Si este bit es
establecido, entonces el ABIDIFF_ERROR El bit también debe establecerse.

El tercer bit, de valor 4, denominado ABIDIFF_ABI_CHANGE significa que el ABI de los binarios es
comparados son diferentes.

El cuarto bit, de valor 8, denominado ABIDIFF_ABI_INCOMPATIBLE_CHANGE significa el ABI del
Los binarios comparados son diferentes de una manera incompatible. Si este bit está establecido, entonces el
ABIDIFF_ABI_CHANGE bit también debe establecerse. Si el ABIDIFF_ABI_CHANGE está configurado y el
ABIDIFF_INCOMPATIBLE_CHANGE is NO , entonces significa que las ABI que se están comparando podrían
o puede que no sea compatible. En ese caso, un ser humano necesita revisar los cambios de ABI
para decidir si son compatibles o no.

Los bits restantes no se utilizan por el momento.

USO EJEMPLOS


· Detectando una posible incompatibilidad ABI en una nueva versión de biblioteca compartida:

$ gato -n prueba0.h
1 estructura foo
2 {
3 entero m0;
4
5 foo ()
6: m0 ()
7 {}
8};
9
10 foo *
11 first_func ();
12
13 nulo
14 second_func (foo &);
15
16 nulo
17 tercer_func ();
$

$ cat -n prueba-aplicación.cc
1 // Compilar con:
2 // g ++ -g -Wall -o aplicación-de-prueba -L. -ltest-0 test-app.cc
3
4 #incluya "test0.h"
5
6 enteros
7 principal ()
8 {
9 foo * f = first_func ();
10 función_segunda (* f);
11 devuelve 0;
12}
$

$ gato -n prueba0.cc
1 // Compila esto con:
2 // g ++ -g -Wall -shared -o libtest-0.so test0.cc
3
4 #incluya "test0.h"
5
6 foo *
7 primera_func ()
8 {
9 foo * f = nuevo foo ();
10 retorno f;
11}
12
13 nulo
14 second_func (foo y)
15 {
16}
17
18 nulo
19 tercer_func ()
20 {
21}
$

$ gato -n prueba1.h
1 estructura foo
2 {
3 entero m0;
4 char m1; / * <- ¡se agregó un nuevo miembro aquí! * /
5
6 foo ()
7: m0 (),
8 m1 ()
9 {}
10};
11
12 foo *
13 first_func ();
14
15 nulo
16 second_func (foo &);
17
18 nulo
19 tercer_func ();
$

$ gato -n prueba1.cc
1 // Compila esto con:
2 // g ++ -g -Wall -shared -o libtest-1.so test1.cc
3
4 #incluya "test1.h"
5
6 foo *
7 primera_func ()
8 {
9 foo * f = nuevo foo ();
10 retorno f;
11}
12
13 nulo
14 second_func (foo y)
15 {
16}
17
18 / * Comentemos la definición de third_func ()
19 nulo
20 tercer_func ()
21 {
22}
23 * /
$

· Compila la primera y segunda versión de las bibliotecas: libtest-0.so y
libtest-1.so:

$ g ++ -g -Wall -shared -o libtest-0.so test0.cc
$ g ++ -g -Wall -shared -o libtest-1.so test1.cc

· Compilar la aplicación y vincularla con la primera versión de la biblioteca,
creando el aplicación de prueba binario:

$ g ++ -g -Wall -o aplicación-de-prueba -L. -ltest-0.so test-app.cc

· Ahora usa abicompat para ver si libtest-1.so es ABI compatible con la aplicación, con respeto
al ABI de libtest-0.so:

$ abicompat prueba-aplicación libtest-0.so libtest-1.so
Es posible que el archivo ELF 'test-app' no sea compatible con ABI con 'libtest-1.so' debido a diferencias con 'libtest-0.so' a continuación:
Resumen de cambios de funciones: 0 eliminado, 2 modificado, 0 funciones agregadas
Resumen de cambios de variables: 0 eliminado, 0 modificado, 0 variable agregada

2 funciones con algún cambio indirecto de subtipo:

[C] 'function foo * first_func ()' tiene algunos cambios indirectos de subtipo:
tipo de retorno cambiado:
en señaló al tipo 'struct foo':
el tamaño cambió de 32 a 64 bits
1 inserción de miembro de datos:
'char foo :: m1', en el desplazamiento 32 (en bits)
[C] 'function void second_func (foo &)' tiene algunos cambios indirectos de subtipo:
el parámetro 0 de tipo 'foo &' tiene cambios de subtipo:
el tipo de referencia 'struct foo' cambió, como se informó anteriormente

$

· Ahora use el modo débil de abicompat, es decir, proporcionando solo la aplicación y la
nueva versión de la biblioteca:

$ abicompat - aplicación de prueba en modo débil libtest-1.so
funciones definidas en la biblioteca
'libtest-1.so'
tienen subtipos que son diferentes de la aplicación
'aplicación de prueba'
espera:

función foo * first_func ():
tipo de retorno cambiado:
en señaló al tipo 'struct foo':
el tamaño cambió de 32 a 64 bits
1 inserción de miembro de datos:
'char foo :: m1', en el desplazamiento 32 (en bits)

$

Use abicompat en línea usando los servicios de onworks.net


Servidores y estaciones de trabajo gratuitos

Descargar aplicaciones de Windows y Linux

Comandos de Linux

Ad