IngleseFranceseSpagnolo

Ad


Favicon di OnWorks

abicompat - Online nel cloud

Esegui abicompat nel provider di hosting gratuito OnWorks su Ubuntu Online, Fedora Online, emulatore online Windows o emulatore online MAC OS

Questo è il comando abicompat che può essere eseguito nel provider di hosting gratuito OnWorks utilizzando una delle nostre molteplici workstation online gratuite come Ubuntu Online, Fedora Online, emulatore online Windows o emulatore online MAC OS

PROGRAMMA:

NOME


abicompat - verifica la compatibilità ABI

abicompat verifica che un'applicazione che si collega a una determinata libreria condivisa sia ancora
ABI compatibile con una versione successiva di quella libreria. Se la nuova versione del
la libreria introduce un'incompatibilità ABI, quindi abicompat suggerisce all'utente cosa esattamente
questa è l'incompatibilità.

INVOCAZIONE


abicompat [opzioni] [ ]

VERSIONI


· --Aiuto

Visualizza un breve aiuto sul comando ed esci.

· --versione | -v

Visualizza la versione del programma ed esci.

· --list-undefined-simboli | -u

Visualizza l'elenco dei simboli non definiti dell'applicazione ed esce.

· --show-base-nomi | -b

Nel report risultante emesso dallo strumento, questa opzione rende l'applicazione e
le biblioteche devono essere indicate solo con i loro nomi di base; non con un nome completo e assoluto. Questo
può essere utile per l'uso in script che vogliono confrontare i nomi dell'applicazione e
librerie indipendentemente dai nomi delle loro directory.

· --app-debug-info-dir

Imposta il percorso della directory in cui si trovano le informazioni di debug dell'applicazione
dovrebbe essere disposto. Questo è utile per i binari dell'applicazione per i quali il debug
info è in un set separato di file.

· --lib-debug-info-dir1

Imposta il percorso della directory in cui si trovano le informazioni di debug della prima versione
della libreria condivisa dovrebbe essere disposto. Questo è utile per la libreria condivisa
binari per i quali le informazioni di debug si trovano in un set separato di file.

· --lib-debug-info-dir2

Imposta il percorso della directory in cui si trovano le informazioni di debug della seconda versione
della libreria condivisa dovrebbe essere disposto. Questo è utile per la libreria condivisa
binari per i quali le informazioni di debug si trovano in un set separato di file.

· --no-show-locs
Non mostrare informazioni su dove si trova il secondo condiviso biblioteca il rispettivo
tipo è stato cambiato.

· --modalità debole

Questo attiva la modalità debole di abicompati. In questa modalità, solo una versione del
biblioteca è obbligatoria. Cioè, abicompat viene invocato in questo modo:

abicompat --modalità debole

Notare quello --modalità debole l'opzione può anche essere omessa se solo una versione del
la libreria è data, insieme all'applicazione; in quel caso, abicompati automaticamente
interruttori per funzionare in modalità debole:

abicompati

In questa modalità debole, i tipi di funzioni e variabili esportati dalla libreria e
consumato dall'applicazione (come in, i simboli di queste funzioni e variabili
non sono definiti nell'applicazione e sono definiti ed esportati dalla libreria) sono
rispetto alla versione di questi tipi come previsto dall'applicazione. E se questi
due versioni di tipi sono diverse, abicompati dice all'utente quali sono le differenze
sono.

In altre parole, in questa modalità, abicompati verifica che i tipi di funzioni e
le variabili esportate dalla libreria significano la stessa cosa dell'applicazione
si aspetta, per quanto riguarda l'ABI.

Si noti che in questa modalità, abicompati non rileva funzioni o variabili esportate
(simboli) previsti dall'applicazione ma rimossi dalla libreria.
Ecco perché si chiama debole modalità.

RITORNO VALORI


Il codice di uscita del abicompati comando è 0 se l'ABI dei binari è
confrontati sono uguali o diversi da zero se differiscono o se lo strumento ha riscontrato un errore.

In quest'ultimo caso, il codice di uscita è un campo di bit di 8 bit in cui ogni bit ha un
significato specifico.

Il primo bit, di valore 1, denominato ABIDIFF_ERRORE significa che c'è stato un errore.

Il secondo bit, di valore 2, denominato ABIDIFF_USAGE_ERROR significa che c'era un errore nel modo
l'utente ha richiamato lo strumento. Potrebbe essere impostato, ad esempio, se l'utente ha invocato lo strumento
con un'opzione della riga di comando sconosciuta, con un numero o un argomento errato, ecc. Se questo bit è
impostare, quindi il ABIDIFF_ERRORE bit deve essere impostato pure.

Il terzo bit, di valore 4, denominato ABIDIFF_ABI_CHANGE si intende l'ABI dei binari essendo
confrontati sono diversi.

Il quarto bit, di valore 8, denominato ABIDIFF_ABI_INCOMPATIBLE_CHANGE significa l'ABI del
i binari confrontati sono diversi in modo incompatibile. Se questo bit è impostato, allora il
ABIDIFF_ABI_CHANGE bit deve essere impostato pure. Se la ABIDIFF_ABI_CHANGE è impostato e il
ABIDIFF_INCOMPATIBILE_CHANGE is NON impostato, allora significa che gli ABI confrontati potrebbero
o potrebbe non essere compatibile. In tal caso, un essere umano ha bisogno di rivedere le modifiche ABI
per decidere se sono compatibili o meno.

I bit rimanenti non vengono utilizzati per il momento.

USO ESEMPI


· Rilevamento di una possibile incompatibilità ABI in una nuova versione della libreria condivisa:

$ cat -n prova0.h
1 struttura foo
2 {
3int m0;
4
5 pippo()
6: m0()
7 {}
8};
9
10 pipì*
11 prima_funzione();
12
13 nulla
14 second_func(pippo&);
15
16 nulla
17 terza_funzione();
$

$ cat -n prova-app.cc
1 // Compila con:
2 // g++ -g -Wall -o test-app -L. -ltest-0 prova-app.cc
3
4 #include "test0.h"
5
6 interi
7 principali()
8 {
9 pippo* f = first_func();
10 secondi_funzione(*f);
11 restituisce 0;
12}
$

$ cat -n prova0.cc
1 // Compila questo con:
2 // g++ -g -Wall -shared -o libtest-0.so test0.cc
3
4 #include "test0.h"
5
6 pipì*
7 prima_funzione()
8 {
9 pippo* f = nuovo pippo();
10 ritorno f;
11}
12
13 nulla
14 second_func(pippo&)
15 {
16}
17
18 nulla
19 terza_funzione()
20 {
21}
$

$ cat -n prova1.h
1 struttura foo
2 {
3int m0;
4 caratteri m1; /* <-- un nuovo membro è stato aggiunto qui! */
5
6 pippo()
7 : m0(),
8 mq()
9 {}
10};
11
12 pipì*
13 prima_funzione();
14
15 nulla
16 second_func(pippo&);
17
18 nulla
19 terza_funzione();
$

$ cat -n prova1.cc
1 // Compila questo con:
2 // g++ -g -Wall -shared -o libtest-1.so test1.cc
3
4 #include "test1.h"
5
6 pipì*
7 prima_funzione()
8 {
9 pippo* f = nuovo pippo();
10 ritorno f;
11}
12
13 nulla
14 second_func(pippo&)
15 {
16}
17
18 /* Commentiamo la definizione di third_func()
19 nulla
20 terza_funzione()
21 {
22}
23 */
$

· Compilare la prima e la seconda versione delle librerie: libtest-0.so ed
libtest-1.so:

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

· Compilare l'applicazione e collegarla alla prima versione della libreria,
creando il app-test binario:

$ g++ -g -Wall -o test-app -L. -ltest-0.so prova-app.cc

· Ora, usa abicompati per vedere se libtest-1.so è compatibile con ABI con l'app, con rispetto
all'ABI di libtest-0.so:

$ abicompat test-app libtest-0.so libtest-1.so
Il file ELF "test-app" potrebbe non essere ABI compatibile con "libtest-1.so" a causa delle differenze con "libtest-0.so" di seguito:
Riepilogo delle modifiche alle funzioni: 0 Rimosso, 2 Modificato, 0 Funzioni aggiunte
Riepilogo modifiche variabili: 0 Rimosso, 0 Modificato, 0 Variabile aggiunta

2 funzioni con qualche modifica indiretta del sottotipo:

[C]'function foo* first_func()' ha alcune modifiche indirette di sottotipo:
tipo di ritorno cambiato:
in puntato al tipo 'struct foo':
dimensione modificata da 32 a 64 bit
Inserimento 1 membro dati:
'char foo::m1', all'offset 32 ​​(in bit)
[C]'function void second_func(foo&)' ha alcune modifiche indirette al sottotipo:
il parametro 0 di tipo 'foo&' ha modifiche di sottotipo:
il tipo di riferimento 'struct foo' è cambiato, come riportato in precedenza

$

· Ora usa la modalità debole di abicompat, cioè fornendo solo l'applicazione e il
nuova versione della libreria:

$ abicompat --weak-mode test-app libtest-1.so
funzioni definite nella libreria
'libtest-1.so'
avere sottotipi diversi da quale applicazione
'app-test'
si aspetta:

funzione foo* first_func():
tipo di ritorno cambiato:
in puntato al tipo 'struct foo':
dimensione modificata da 32 a 64 bit
Inserimento 1 membro dati:
'char foo::m1', all'offset 32 ​​(in bit)

$

Utilizzare abicompat online utilizzando i servizi onworks.net


Server e workstation gratuiti

Scarica app per Windows e Linux

Comandi Linux

Ad