Angielskifrancuskihiszpański

Ad


Ulubiona usługa OnWorks

abicompat — online w chmurze

Uruchom abicompat w darmowym dostawcy hostingu OnWorks przez Ubuntu Online, Fedora Online, emulator online Windows lub emulator online MAC OS

Jest to polecenie abicompat, które można uruchomić u dostawcy bezpłatnego hostingu OnWorks przy użyciu jednej z naszych wielu bezpłatnych stacji roboczych online, takich jak Ubuntu Online, Fedora Online, emulator online systemu Windows lub emulator online MAC OS

PROGRAM:

IMIĘ


abicompat - sprawdź kompatybilność ABI

abicompat sprawdza, czy aplikacja, która łączy się z daną współdzieloną biblioteką, nie działa
ABI kompatybilny z kolejną wersją tej biblioteki. Jeśli nowa wersja
biblioteka wprowadza niezgodność ABI, a następnie abicompat podpowiada użytkownikowi, co dokładnie
ta niezgodność jest.

WEZWANIE


abicompat [opcje] [ ]

OPCJE


· --help

Wyświetl krótką pomoc dotyczącą polecenia i wyjdź.

· --wersja | -v

Wyświetl wersję programu i wyjdź.

· --list-niezdefiniowanych-symboli | -u

Wyświetl listę niezdefiniowanych symboli aplikacji i wyjdź.

· --show-base-names | -b

W wynikowym raporcie emitowanym przez narzędzie ta opcja powoduje, że aplikacja i
do bibliotek należy odnosić się wyłącznie za pomocą ich nazw podstawowych; nie przez pełną nazwę absolutną. Ten
może być przydatny do użycia w skryptach, które chcą porównać nazwy aplikacji i
bibliotek niezależnie od tego, jakie są ich nazwy katalogów.

· --app-debug-info-katalog

Ustaw ścieżkę do katalogu, w którym znajdują się informacje debugowania aplikacji
miał być rozłożony. Jest to przydatne w przypadku plików binarnych aplikacji, dla których debug
info znajduje się w osobnym zestawie plików.

· --lib-debug-informacje-katalog1

Ustaw ścieżkę do katalogu, w którym znajdują się informacje debugowania pierwszej wersji
biblioteki wspólnej ma być rozplanowany. Jest to przydatne w przypadku biblioteki współdzielonej
pliki binarne, dla których informacje debugowania znajdują się w osobnym zestawie plików.

· --lib-debug-informacje-katalog2

Ustaw ścieżkę do katalogu, w którym znajdują się informacje debugowania drugiej wersji
biblioteki wspólnej ma być rozplanowany. Jest to przydatne w przypadku biblioteki współdzielonej
pliki binarne, dla których informacje debugowania znajdują się w osobnym zestawie plików.

· --no-show-loc
Nie pokazuj informacji o tym, gdzie w Dopiero shared biblioteka odpowiedni
typ został zmieniony.

· --słaby tryb

To uruchamia słaby tryb abikompat. W tym trybie tylko jedna wersja pliku
wymagana jest biblioteka. Oznacza to, że abicompat jest wywoływany w następujący sposób:

abicompat --tryb słaby

Zauważ, że --słaby tryb opcję można nawet pominąć, jeśli tylko jedna wersja pliku
wraz z aplikacją przekazywana jest biblioteka; w tym wypadku, abikompat automatycznie
przełączniki do pracy w trybie słabym:

abikompat

W tym słabym trybie typy funkcji i zmiennych eksportowanych przez bibliotekę i
zużywane przez aplikację (jak w symbolach tych funkcji i zmiennych
są niezdefiniowane w aplikacji i są definiowane i eksportowane przez bibliotekę) są
w porównaniu z wersją tych typów zgodnie z oczekiwaniami aplikacji. A jeśli te
dwie wersje typów są różne, abikompat informuje użytkownika, jakie są różnice
są.

Innymi słowy, w tym trybie abikompat sprawdza, czy typy funkcji i
zmienne eksportowane przez bibliotekę oznaczają to samo, co aplikacja
oczekuje, jeśli chodzi o ABI.

Należy pamiętać, że w tym trybie abikompat nie wykrywa wyeksportowanych funkcji ani zmiennych
(symbole), których oczekuje aplikacja, ale które są usuwane z biblioteki.
Dlatego to się nazywa słaby tryb.

POWRÓT WARTOŚCI


Kod wyjścia z abikompat polecenie ma wartość 0, jeśli ABI plików binarnych jest
porównywane są równe lub niezerowe, jeśli się różnią lub jeśli narzędzie napotkało błąd.

W tym drugim przypadku kod wyjścia to pole bitowe o szerokości 8 bitów, w którym każdy bit ma wartość
konkretne znaczenie.

Pierwszy bit o wartości 1, nazwany ABIDIFF_BŁĄD oznacza, że ​​wystąpił błąd.

Drugi bit o wartości 2 o nazwie ABIDIFF_USAGE_ERROR oznacza, że ​​wystąpił błąd w drodze
użytkownik wywołał narzędzie. Można to ustawić na przykład, jeśli użytkownik wywołał narzędzie
z nieznanym przełącznikiem wiersza poleceń, z błędną liczbą lub argumentem itp. Jeśli ten bit jest
ustawić, a następnie ABIDIFF_BŁĄD Bit również musi być ustawiony.

Trzeci bit o wartości 4 o nazwie ABIDIFF_ABI_CHANGE oznacza ABI istot binarnych
porównywane są różne.

Czwarty bit o wartości 8 o nazwie ABIDIFF_ABI_INCOMPATIBLE_CHANGE oznacza ABI
porównywane pliki binarne różnią się w niekompatybilny sposób. Jeśli ten bit jest ustawiony, to
ABIDIFF_ABI_CHANGE Bit również musi być ustawiony. jeśli ABIDIFF_ABI_CHANGE jest ustawiony i
ABIDIFF_INCOMPATIBLE_CHANGE is NIE ustawiony, oznacza to, że porównywane ABI mogą
lub może nie być kompatybilny. W takim przypadku człowiek musi przejrzeć zmiany ABI
zdecydować, czy są kompatybilne, czy nie.

Pozostałe bity na razie nie są używane.

ZASTOSOWANIE PRZYKŁADY


· Wykrywanie możliwej niezgodności ABI w nowej wersji biblioteki współdzielonej:

$ cat -n test0.h
1 struktura foo
2 {
3 cal m0;
4
5 foo()
6: m0()
7 {}
8 };
9
10 fu*
11 pierwsza_funkcja();
12
13 pustka
14 druga_funkcja(foo&);
15
16 pustka
17 trzecia_funkcja();
$

$ cat -n aplikacja-testowa.cc
1 // Skompiluj z:
2 // g++ -g -Wall -o test-app -L. -ltest-0 aplikacja-testowa.cc
3
4 #włącz "test0.h"
5
6 wewn
7 główny()
8 {
9 foo* f = pierwsza_funkcja();
10 druga_funkcja(*f);
11 powrót 0;
12}
$

$ cat -n test0.cc
1 // Skompiluj to z:
2 // g++ -g -Wall -shared -o libtest-0.so test0.cc
3
4 #włącz "test0.h"
5
6 fu*
7 pierwsza_funkcja()
8 {
9 foo* f = nowy foo();
10 powrót f;
11}
12
13 pustka
14 sekunda_funkcja(foo&)
15 {
16}
17
18 pustka
19 trzecia_funkcja()
20 {
21}
$

$ cat -n test1.h
1 struktura foo
2 {
3 cal m0;
4 char m1; /* <-- nowy członek został tutaj dodany! */
5
6 foo()
7: m0(),
8 m1()
9 {}
10 };
11
12 fu*
13 pierwsza_funkcja();
14
15 pustka
16 druga_funkcja(foo&);
17
18 pustka
19 trzecia_funkcja();
$

$ cat -n test1.cc
1 // Skompiluj to z:
2 // g++ -g -Wall -shared -o libtest-1.so test1.cc
3
4 #włącz "test1.h"
5
6 fu*
7 pierwsza_funkcja()
8 {
9 foo* f = nowy foo();
10 powrót f;
11}
12
13 pustka
14 sekunda_funkcja(foo&)
15 {
16}
17
18 /* Skomentujmy definicję trzeciej_funkcji()
19 pustka
20 trzecia_funkcja()
21 {
22}
23 */
$

· Skompiluj pierwszą i drugą wersję bibliotek: 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

· Skompiluj aplikację i połącz ją z pierwszą wersją biblioteki,
tworzenie aplikacja testowa dwójkowy:

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

· Teraz użyj abikompat aby sprawdzić, czy libtest-1.so jest kompatybilny z aplikacją ABI, z szacunkiem
do ABI libtest-0.so:

$ abicompat aplikacja testowa libtest-0.so libtest-1.so
Plik ELF „test-app” może nie być zgodny z ABI z „libtest-1.so” ze względu na różnice z „libtest-0.so” poniżej:
Podsumowanie zmian funkcji: 0 usunięto, 2 zmieniono, 0 dodano funkcje
Podsumowanie zmian zmiennych: 0 usunięto, 0 zmieniono, 0 dodano zmienną

2 funkcje z pewną pośrednią zmianą podtypu:

[C]'function foo* first_func()' ma pewne pośrednie zmiany podtypów:
zmieniony typ zwrotu:
w wskazał typ „struct foo”:
rozmiar zmieniony z 32 na 64 bity
1 wstawienie członka danych:
'char foo::m1', z przesunięciem 32 (w bitach)
[C]'function void second_func(foo&)' ma pewne pośrednie zmiany podtypów:
parametr 0 typu „foo&” ma zmiany podtypu:
typ odniesienia „struct foo” został zmieniony, jak podano wcześniej

$

· Teraz użyj słabego trybu abicompat, czyli udostępnij tylko aplikację i
nowa wersja biblioteki:

$ abicompat --słaba aplikacja testowa libtest-1.so
funkcje zdefiniowane w bibliotece
„libtest-1.so”
mają podtypy, które różnią się od aplikacji
„aplikacja testowa”
oczekuje:

funkcja foo* pierwsza_funkcja():
zmieniony typ zwrotu:
w wskazał typ „struct foo”:
rozmiar zmieniony z 32 na 64 bity
1 wstawienie członka danych:
'char foo::m1', z przesunięciem 32 (w bitach)

$

Korzystaj z abicompat online, korzystając z usług onworks.net


Darmowe serwery i stacje robocze

Pobierz aplikacje Windows i Linux

Komendy systemu Linux

Ad