EngelsFransSpaans

Ad


OnWorks-favicon

abicompat - Online in de cloud

Voer abicompat uit in de gratis hostingprovider van OnWorks via Ubuntu Online, Fedora Online, Windows online emulator of MAC OS online emulator

Dit is de opdracht abicompat die kan worden uitgevoerd in de gratis hostingprovider van OnWorks met behulp van een van onze meerdere gratis online werkstations zoals Ubuntu Online, Fedora Online, Windows online emulator of MAC OS online emulator

PROGRAMMA:

NAAM


abicompat - controleer ABI-compatibiliteit

abicompat controleert of een applicatie die linkt naar een bepaalde gedeelde bibliotheek nog steeds actief is
ABI compatibel met een volgende versie van die bibliotheek. Als de nieuwe versie van de
bibliotheek een ABI-incompatibiliteit introduceert, waarna abicompat de gebruiker laat doorschemeren wat precies
die incompatibiliteit is.

AANROEPING


abicompat [opties] [ ]

OPTIES


· --help

Geef een korte hulp weer over de opdracht en sluit af.

· --versie | -v

Geef de versie van het programma weer en sluit af.

· --lijst-ongedefinieerde-symbolen | -u

Geef de lijst met ongedefinieerde symbolen van de applicatie weer en sluit af.

· --show-base-namen | -b

In het resulterende rapport dat door de tool wordt verzonden, maakt deze optie de toepassing en
naar bibliotheken wordt alleen verwezen met hun basisnaam; niet onder een volledige absolute naam. Dit
kan handig zijn voor gebruik in scripts die de namen van de applicatie willen vergelijken
bibliotheken onafhankelijk van wat hun directorynamen zijn.

· --app-debug-info-dir

Stel het pad in naar de map waarin de foutopsporingsinformatie van de toepassing zich bevindt
verondersteld te zijn aangelegd. Dit is handig voor binaire bestanden van toepassingen waarvoor debug
info bevindt zich in een aparte set bestanden.

· --lib-debug-info-dir1

Stel het pad in naar de map waaronder de foutopsporingsinformatie van de eerste versie staat
van de gedeelde bibliotheek zou moeten worden aangelegd. Dit is handig voor gedeelde bibliotheek
binaire bestanden waarvoor de foutopsporingsinformatie zich in een afzonderlijke set bestanden bevindt.

· --lib-debug-info-dir2

Stel het pad in naar de map waaronder de foutopsporingsinformatie van de tweede versie staat
van de gedeelde bibliotheek zou moeten worden aangelegd. Dit is handig voor gedeelde bibliotheek
binaire bestanden waarvoor de foutopsporingsinformatie zich in een afzonderlijke set bestanden bevindt.

· --no-show-locs
Toon geen informatie over waar in de tweede gedeeld bibliotheek de respectieve
soort is gewijzigd.

· --zwakke modus

Dit activeert de zwakke modus van abicompat. In deze modus is slechts één versie van de
bibliotheek is vereist. Dat wil zeggen, abicompat wordt als volgt aangeroepen:

abicompat --zwakke modus

Merk op dat de --zwakke modus optie kan zelfs worden weggelaten als er slechts één versie van de
bibliotheek wordt gegeven, samen met de applicatie; in dat geval, abicompat webmaster.
schakelaars om in zwakke modus te werken:

abicompat

In deze zwakke modus worden de typen functies en variabelen die door de bibliotheek worden geëxporteerd en
verbruikt door de applicatie (zoals in de symbolen van deze functies en variabelen
zijn niet gedefinieerd in de applicatie en worden gedefinieerd en geëxporteerd door de bibliotheek).
vergeleken met de versie van deze typen zoals verwacht door de applicatie. En als deze
twee versies van typen zijn verschillend, abicompat vertelt de gebruiker wat de verschillen zijn
zijn.

Met andere woorden: in deze modus abicompat controleert of de typen functies en
variabelen die door de bibliotheek worden geëxporteerd, betekenen hetzelfde als wat de applicatie zegt
verwacht, wat de ABI betreft.

Houd er rekening mee dat in deze modus abicompat detecteert geen geëxporteerde functies of variabelen
(symbolen) die door de applicatie worden verwacht, maar die uit de bibliotheek worden verwijderd.
Daarom heet het zwak modus.

RETURN WAARDEN


De exitcode van de abicompat commando is 0 als de ABI van de binaire bestanden is
vergeleken zijn gelijk, of niet nul als ze verschillen of als er een fout in de tool is opgetreden.

In het laatste geval is de exitcode een bitveld van 8 bits breed waarin elke bit een
specifieke betekenis.

Het eerste bit, met waarde 1, genaamd ABIDIFF_ERROR betekent dat er een fout is opgetreden.

Het tweede bit, met waarde 2, genaamd ABIDIFF_USAGE_ERROR betekent dat er een fout in de weg zat
de gebruiker heeft het hulpprogramma aangeroepen. Het kan bijvoorbeeld worden ingesteld als de gebruiker de tool heeft aangeroepen
met een onbekende opdrachtregelschakelaar, met een verkeerd nummer of argument, enz. Als dit bit is
instellen, dan de ABIDIFF_ERROR bit moet ook worden ingesteld.

Het derde bit, met waarde 4, genaamd ABIDIFF_ABI_CHANGE betekent de ABI van het binaire bestand
vergeleken zijn verschillend.

Het vierde bit, met waarde 8, genoemd ABIDIFF_ABI_INCOMPATIBLE_CHANGE betekent de ABI van de
vergeleken binaire bestanden zijn op een incompatibele manier verschillend. Als dit bit is ingesteld, wordt de
ABIDIFF_ABI_CHANGE bit moet ook worden ingesteld. Als de ABIDIFF_ABI_CHANGE is ingesteld en de
ABIDIFF_INCOMPATIBLE_CHANGE is NIET is ingesteld, dan betekent dit dat de ABI's die worden vergeleken mogelijk zijn
of zijn mogelijk niet compatibel. In dat geval moet een mens de ABI-wijzigingen beoordelen
om te beslissen of ze compatibel zijn of niet.

De resterende bits worden momenteel niet gebruikt.

GEBRUIK Voorbeelden


· Het detecteren van een mogelijke ABI-incompatibiliteit in een nieuwe gedeelde bibliotheekversie:

$ kat -n test0.h
1 structuur foo
2 {
3 int m0;
4
5 foo()
6 : m0()
7 {}
8};
9
10 foo*
11 eerste_functie();
12
13 leegte
14 second_func(foo&);
15
16 leegte
17 derde_func();
$

$ cat -n test-app.cc
1 // Compileren met:
2 // g++ -g -Wall -o test-app -L. -ltest-0 test-app.cc
3
4 #include "test0.h"
5
6 int
7 hoofd()
8 {
9 foo* f = eerste_func();
10 seconde_func(*f);
11 retour 0;
12}
$

$ kat -n test0.cc
1 // Compileer dit met:
2 // g++ -g -Wall -shared -o libtest-0.so test0.cc
3
4 #include "test0.h"
5
6 foo*
7 eerste_func()
8 {
9 foo* f = nieuwe foo();
10 retour f;
11}
12
13 leegte
14 seconden_func(foo&)
15 {
16}
17
18 leegte
19 derde_func()
20 {
21}
$

$ kat -n test1.h
1 structuur foo
2 {
3 int m0;
4 tekens m1; /* <-- er is hier een nieuw lid toegevoegd! */
5
6 foo()
7: m0(),
8 m1()
9 {}
10};
11
12 foo*
13 eerste_functie();
14
15 leegte
16 second_func(foo&);
17
18 leegte
19 derde_func();
$

$ kat -n test1.cc
1 // Compileer dit met:
2 // g++ -g -Wall -shared -o libtest-1.so test1.cc
3
4 #include "test1.h"
5
6 foo*
7 eerste_func()
8 {
9 foo* f = nieuwe foo();
10 retour f;
11}
12
13 leegte
14 seconden_func(foo&)
15 {
16}
17
18 /* Laten we de definitie van third_func() becommentariëren
19 leegte
20 derde_func()
21 {
22}
23 */
$

· Compileer de eerste en tweede versie van de bibliotheken: libtest-0.zo en
libtest-1.zo:

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

· Compileer de applicatie en koppel deze aan de eerste versie van de bibliotheek,
het maken van de test-app binair:

$ g++ -g -Wand -o test-app -L. -ltest-0.dus test-app.cc

· Gebruik nu abicompat om te zien of libtest-1.so ABI compatibel is met de app, met respect
naar de ABI van libtest-0.so:

$ abicompat test-app libtest-0.so libtest-1.so
ELF-bestand 'test-app' is mogelijk niet ABI-compatibel met 'libtest-1.so' vanwege verschillen met 'libtest-0.so' hieronder:
Samenvatting van functiewijzigingen: 0 Verwijderd, 2 Gewijzigd, 0 Toegevoegde functies
Samenvatting van wijzigingen in variabelen: 0 Verwijderd, 0 Gewijzigd, 0 Variabele toegevoegd

2 functies met enige indirecte subtypeverandering:

[C]'function foo* first_func()' heeft enkele indirecte subtypewijzigingen:
retourtype gewijzigd:
in wees naar type 'struct foo':
grootte gewijzigd van 32 naar 64 bits
1 gegevenslidinvoeging:
'char foo::m1', bij offset 32 ​​(in bits)
[C]'function void second_func(foo&)' heeft enkele indirecte subtypewijzigingen:
parameter 0 van het type 'foo&' heeft subtypewijzigingen:
Het type waarnaar wordt verwezen 'struct foo' is gewijzigd, zoals eerder gerapporteerd

$

· Gebruik nu de zwakke modus van abicompat, dat wil zeggen dat u alleen de applicatie en de
nieuwe versie van de bibliotheek:

$ abicompat --zwakke-modus test-app libtest-1.so
functies gedefinieerd in de bibliotheek
'libtest-1.so'
hebben subtypen die verschillen van welke toepassing
'test-app'
verwacht:

functie foo* eerste_func():
retourtype gewijzigd:
in wees naar type 'struct foo':
grootte gewijzigd van 32 naar 64 bits
1 gegevenslidinvoeging:
'char foo::m1', bij offset 32 ​​(in bits)

$

Gebruik abicompat online met behulp van onworks.net-services


Gratis servers en werkstations

Windows- en Linux-apps downloaden

Linux-commando's

Ad