EnglezăFrancezăSpaniolă

Ad


Favicon OnWorks

abicompat - Online în cloud

Rulați abicompat în furnizorul de găzduire gratuit OnWorks prin Ubuntu Online, Fedora Online, emulator online Windows sau emulator online MAC OS

Aceasta este comanda abicompat care poate fi rulată în furnizorul de găzduire gratuit OnWorks folosind una dintre multiplele noastre stații de lucru online gratuite, cum ar fi Ubuntu Online, Fedora Online, emulator online Windows sau emulator online MAC OS

PROGRAM:

NUME


abicompat - verificați compatibilitatea ABI

abicompat verifică dacă o aplicație care face legătura cu o anumită bibliotecă partajată este încă
ABI compatibil cu o versiune ulterioară a bibliotecii respective. Dacă noua versiune a
biblioteca introduce o incompatibilitate ABI, apoi abicompat sugerează utilizatorului ce anume
acea incompatibilitate este.

INVOCARE


abicompat [opțiuni] [ ]

OPŢIUNI


· --Ajutor

Afișează un scurt ajutor despre comandă și ieșire.

· --versiune | -v

Afișați versiunea programului și ieșiți.

· --list-undefined-simboluri | -u

Afișați lista de simboluri nedefinite ale aplicației și ieșiți.

· --show-base-names | -b

În raportul rezultat emis de instrument, această opțiune face aplicația și
bibliotecile să fie menționate numai prin numele lor de bază; nu printr-un nume absolut complet. Acest
poate fi util pentru utilizare în scripturi care doresc să compare numele aplicației și
biblioteci independent de numele directorului lor.

· --app-debug-info-dir

Setați calea către directorul în care se află informațiile de depanare ale aplicației
ar trebui să fie așezat. Acest lucru este util pentru aplicațiile binare pentru care se depanează
informațiile sunt într-un set separat de fișiere.

· --lib-debug-info-dir1

Setați calea către directorul în care se află informațiile de depanare a primei versiuni
bibliotecii partajate ar trebui să fie aranjate. Acest lucru este util pentru biblioteca partajată
binare pentru care informațiile de depanare sunt într-un set separat de fișiere.

· --lib-debug-info-dir2

Setați calea către directorul în care se află informațiile de depanare a celei de-a doua versiuni
bibliotecii partajate ar trebui să fie aranjate. Acest lucru este util pentru biblioteca partajată
binare pentru care informațiile de depanare sunt într-un set separat de fișiere.

· --no-show-locs
Nu afișați informații despre locația din al doilea comun bibliotecă respectivul
tipul a fost schimbat.

· --mod-slab

Acest lucru declanșează modul slab al abicompat. În acest mod, doar o versiune a
bibliotecă este necesară. Adică, abicompat este invocat astfel:

abicompat --weak-mode

Rețineți că --mod-slab opțiunea poate fi chiar omisă dacă o singură versiune a
se oferă bibliotecă, împreună cu aplicația; in acest caz, abicompat în mod automat
comutatoare pentru a funcționa în modul slab:

abicompat

În acest mod slab, tipurile de funcții și variabile exportate de bibliotecă și
consumate de aplicație (ca în, simbolurile acestor funcții și variabile
sunt nedefinite în aplicație și sunt definite și exportate de bibliotecă) sunt
în comparație cu versiunea acestor tipuri așa cum se așteaptă aplicația. Și dacă acestea
două versiuni de tipuri sunt diferite, abicompat spune utilizatorului care sunt diferențele
sunt.

Cu alte cuvinte, în acest mod, abicompat verifică dacă tipurile de funcţii şi
variabilele exportate de bibliotecă înseamnă același lucru ca și aplicația
se așteaptă, în ceea ce privește ABI.

Rețineți că în acest mod, abicompat nu detectează funcțiile sau variabilele exportate
(simboluri) care sunt așteptate de aplicație, dar care sunt eliminate din bibliotecă.
De aceea se numește slab Mod.

A REVENI VALORI


Codul de ieșire al abicompat comanda este fie 0 dacă ABI-ul binarelor este
comparate sunt egale sau diferite de zero dacă diferă sau dacă instrumentul a întâmpinat o eroare.

În ultimul caz, codul de ieșire este un câmp de biți lat de 8 biți în care fiecare bit are un
sens specific.

Primul bit, de valoare 1, numit ABIDIFF_ERROR înseamnă că a fost o eroare.

Al doilea bit, de valoare 2, numit ABIDIFF_USAGE_ERROR înseamnă că a existat o eroare în drum
utilizatorul a invocat instrumentul. Poate fi setat, de exemplu, dacă utilizatorul a invocat instrumentul
cu un comutator necunoscut de linie de comandă, cu un număr sau un argument greșit etc. Dacă acest bit este
set, apoi ABIDIFF_ERROR bit trebuie setat de asemenea.

Al treilea bit, de valoare 4, numit ABIDIFF_ABI_CHANGE înseamnă ABI-ul ființei binare
comparate sunt diferite.

Al patrulea bit, de valoare 8, numit ABIDIFF_ABI_INCOMPATIBLE_CHANGE înseamnă ABI al
binarele comparate sunt diferite într-un mod incompatibil. Dacă acest bit este setat, atunci
ABIDIFF_ABI_CHANGE bit trebuie setat de asemenea. Dacă ABIDIFF_ABI_CHANGE este setat și
ABIDIFF_INCOMPATIBLE_CHANGE is NU setat, atunci înseamnă că ABI-urile comparate ar putea
sau ar putea să nu fie compatibil. În acest caz, o ființă umană trebuie să revizuiască modificările ABI
pentru a decide dacă sunt compatibile sau nu.

Biții rămași nu sunt folosiți pentru moment.

UTILIZARE EXEMPLE


· Detectarea unei posibile incompatibilități ABI într-o nouă versiune de bibliotecă partajată:

$ cat -n test0.h
1 struct foo
2 {
3 int m0;
4
5 picioare ()
6 : m0()
7 {}
8};
9
10 picioare*
11 first_func();
12
13 nul
14 secunde_func(foo&);
15
16 nul
17 a treia_funcție();
$

$ cat -n test-app.cc
1 // Compilați cu:
2 // g++ -g -Wall -o test-app -L. -ltest-0 test-app.cc
3
4 #include „test0.h”
5
6 int
7 principal()
8 {
9 foo* f = first_func();
10 secunde_func(*f);
11 returnează 0;
12}
$

$ cat -n test0.cc
1 // Compilați asta cu:
2 // g++ -g -Wall -shared -o libtest-0.so test0.cc
3
4 #include „test0.h”
5
6 picioare*
7 first_func()
8 {
9 foo* f = new foo();
10 întoarcere f;
11}
12
13 nul
14 second_func(foo&)
15 {
16}
17
18 nul
19 third_func()
20 {
21}
$

$ cat -n test1.h
1 struct foo
2 {
3 int m0;
4 caractere m1; /* <-- un nou membru a fost adăugat aici! */
5
6 picioare ()
7 : m0(),
8 m1()
9 {}
10};
11
12 picioare*
13 first_func();
14
15 nul
16 secunde_func(foo&);
17
18 nul
19 a treia_funcție();
$

$ cat -n test1.cc
1 // Compilați asta cu:
2 // g++ -g -Wall -shared -o libtest-1.so test1.cc
3
4 #include „test1.h”
5
6 picioare*
7 first_func()
8 {
9 foo* f = new foo();
10 întoarcere f;
11}
12
13 nul
14 second_func(foo&)
15 {
16}
17
18 /* Să comentăm definiția pentru third_func()
19 nul
20 third_func()
21 {
22}
23 * /
$

· Compilați prima și a doua versiune a bibliotecilor: libtest-0.so și
libtest-1.so:

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

· Compilați aplicația și conectați-o cu prima versiune a bibliotecii,
crearea aplicația de testare binar:

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

· Acum, folosește abicompat pentru a vedea dacă libtest-1.so este compatibil ABI cu aplicația, cu respect
la ABI-ul libtest-0.so:

$ abicompat test-app libtest-0.so libtest-1.so
Fișierul ELF „test-app” ar putea să nu fie compatibil ABI cu „libtest-1.so” din cauza diferențelor cu „libtest-0.so” de mai jos:
Rezumatul modificărilor funcțiilor: 0 Eliminat, 2 Modificat, 0 Funcții adăugate
Rezumatul modificărilor variabilelor: 0 Eliminate, 0 Modificate, 0 Variabilă adăugată

2 funcții cu unele modificări indirecte de subtip:

[C]'function foo* first_func()' are câteva modificări indirecte de subtip:
tipul de returnare schimbat:
în a indicat să tastați „struct foo”:
dimensiunea s-a schimbat de la 32 la 64 de biți
Inserarea unui membru de date:
„char foo::m1”, la offset 32 ​​(în biți)
[C]'function void second_func(foo&)' are câteva modificări indirecte de subtip:
parametrul 0 de tip „foo&” are modificări de subtip:
tipul de referință „struct foo” a fost schimbat, așa cum a fost raportat mai devreme

$

· Acum utilizați modul slab al abicompat, adică oferind doar aplicația și
noua versiune a bibliotecii:

$ abicompat --weak-mode test-app libtest-1.so
funcții definite în bibliotecă
„libtest-1.so”
au subtipuri care sunt diferite de ce aplicație
„aplicație de testare”
așteaptă:

funcția foo* first_func():
tipul de returnare schimbat:
în a indicat să tastați „struct foo”:
dimensiunea s-a schimbat de la 32 la 64 de biți
Inserarea unui membru de date:
„char foo::m1”, la offset 32 ​​(în biți)

$

Utilizați abicompat online folosind serviciile onworks.net


Servere și stații de lucru gratuite

Descărcați aplicații Windows și Linux

Comenzi Linux

Ad