англійськафранцузькаіспанська

Ad


Значок OnWorks

abicompat - Інтернет у хмарі

Запустіть abicompat у постачальника безкоштовного хостингу OnWorks через Ubuntu Online, Fedora Online, онлайн-емулятор Windows або онлайн-емулятор MAC OS

Це команда abicompat, яку можна запустити в постачальнику безкоштовного хостингу OnWorks за допомогою однієї з наших численних безкоштовних робочих станцій, таких як Ubuntu Online, Fedora Online, онлайн-емулятор Windows або онлайн-емулятор MAC OS

ПРОГРАМА:

ІМ'Я


abicompat - перевірити сумісність ABI

abicompat перевіряє, що програма, яка зв'язується з даною спільною бібліотекою, все ще залишається
ABI сумісна з наступною версією цієї бібліотеки. Якщо нова версія
бібліотека вводить несумісність ABI, потім abicompat натякає користувачеві, що саме
що несумісність є.

ІНВОКАЦІЯ


abicompat [параметри] [ ]

ВАРІАНТИ


· --допомога

Відобразіть коротку довідку про команду та вийдіть.

· -- версія | -v

Відобразити версію програми та вийти.

· --список-невизначених-символів | -u

Відобразити список невизначених символів програми та вийти.

· --show-base-names | -b

У підсумковому звіті, створеному інструментом, цей параметр робить додаток і
бібліотеки посилаються лише за базовими іменами; не повною абсолютною назвою. Це
може бути корисним для використання в сценаріях, які хочуть порівняти назви програми і
бібліотеки незалежно від їх імен каталогів.

· --app-debug-info-каталог

Встановіть шлях до каталогу, в якому знаходиться інформація про налагодження програми
має бути викладено. Це корисно для бінарних файлів програми, для яких налагоджено
інформація знаходиться в окремому наборі файлів.

· --lib-debug-info-каталог1

Встановіть шлях до каталогу, в якому міститься інформація про налагодження першої версії
передбачається розміщення спільної бібліотеки. Це корисно для спільної бібліотеки
двійкові файли, для яких інформація про налагодження міститься в окремому наборі файлів.

· --lib-debug-info-каталог2

Встановіть шлях до каталогу, в якому знаходиться налагоджувальна інформація другої версії
передбачається розміщення спільної бібліотеки. Це корисно для спільної бібліотеки
двійкові файли, для яких інформація про налагодження міститься в окремому наборі файлів.

· --no-show-locs
Не показувати інформацію про те, де в другий загальні бібліотека відповідний
тип був змінений.

· -- слабкий режим

Це запускає слабкий режим абікомпат. У цьому режимі тільки одна версія
потрібна бібліотека. Тобто abicompat викликається таким чином:

abicompat --слабий режим

Зауважте, що -- слабкий режим опцію можна навіть пропустити, якщо лише одна версія
бібліотека надається разом із заявкою; в такому разі, абікомпат автоматично
перемикає на роботу в слабкому режимі:

abicompat

У цьому слабкому режимі типи функцій і змінних експортуються бібліотекою і
споживані програмою (наприклад, символи цих функцій і змінних
не визначені в програмі та визначені та експортовані бібліотекою).
порівняно з версіями цих типів, як очікується програмою. А якщо ці
дві версії типів відрізняються, абікомпат розповідає користувачеві, які відмінності
є.

Іншими словами, в цьому режимі абікомпат перевіряє, що типи функцій і
Змінні, експортовані бібліотекою, означають те саме, що і програма
очікує, що стосується ABI.

Зверніть увагу, що в цьому режимі абікомпат не виявляє експортовані функції чи змінні
(символи), які очікуються програмою, але видалені з бібліотеки.
Тому так і називається слабкий Режим.

ПОВЕРНЕННЯ ЗНАЧЕННЯ


Код виходу абікомпат команда дорівнює 0, якщо ABI бінарних файлів є
порівнювані рівні або відмінні від нуля, якщо вони відрізняються або якщо інструмент знайшов помилку.

У наступному випадку код виходу являє собою 8-бітове бітове поле, в якому кожен біт має a
конкретне значення.

Іменований перший біт значення 1 ABIDIFF_ERROR означає, що сталася помилка.

Другий біт, значення 2, названий ABIDIFF_USAGE_ERROR означає, що в дорозі сталася помилка
користувач викликав інструмент. Він може бути встановлений, наприклад, якщо користувач запустив інструмент
з невідомим перемикачем командного рядка, з неправильним числом або аргументом тощо. Якщо цей біт є
встановити, потім ABIDIFF_ERROR біт також потрібно встановити.

Третій біт, значення 4, названий ABIDIFF_ABI_CHANGE означає ABI бінарного буття
порівнюються різні.

Іменований четвертий біт зі значенням 8 ABIDIFF_ABI_INCOMPATIBLE_CHANGE означає ABI
порівнювані двійкові файли відрізняються несумісним чином. Якщо цей біт встановлений, то
ABIDIFF_ABI_CHANGE біт також потрібно встановити. Якщо ABIDIFF_ABI_CHANGE встановлюється і
ABIDIFF_INCOMPATIBLE_CHANGE is НЕ встановлено, то це означає, що порівнювані ABI можуть
або може бути несумісним. У цьому випадку людині необхідно переглянути зміни ABI
щоб вирішити, сумісні вони чи ні.

Решта біти на даний момент не використовуються.

ВИКОРИСТАННЯ ПРИКЛАДИ


· Виявлення можливої ​​несумісності ABI у новій версії спільної бібліотеки:

$ cat -n test0.h
1 структура foo
2 {
3 int m0;
4
5 футів ()
6 : m0()
7 {}
8 };
9
10 футів*
11 first_func();
12
13 недійсний
14 second_func(foo&);
15
16 недійсний
17 third_func();
$

$ cat -n test-app.cc
1 // Компіляція з:
2 // g++ -g -Wall -o test-app -L. -ltest-0 test-app.cc
3
4 #include "test0.h"
5
6 міжнар
7 головний()
8 {
9 foo* f = first_func();
10 second_func(*f);
11 повернути 0;
12}
$

$ cat -n test0.cc
1 // Скомпілювати це за допомогою:
2 // g++ -g -Wall -shared -o libtest-0.so test0.cc
3
4 #include "test0.h"
5
6 футів*
7 first_func()
8 {
9 foo* f = новий foo();
10 повернення f;
11}
12
13 недійсний
14 second_func(foo&)
15 {
16}
17
18 недійсний
19 third_func()
20 {
21}
$

$ cat -n test1.h
1 структура foo
2 {
3 int m0;
4 символ m1; /* <-- тут додано нового учасника! */
5
6 футів ()
7 : m0(),
8 м1()
9 {}
10 };
11
12 футів*
13 first_func();
14
15 недійсний
16 second_func(foo&);
17
18 недійсний
19 third_func();
$

$ cat -n test1.cc
1 // Скомпілювати це за допомогою:
2 // g++ -g -Wall -shared -o libtest-1.so test1.cc
3
4 #include "test1.h"
5
6 футів*
7 first_func()
8 {
9 foo* f = новий foo();
10 повернення f;
11}
12
13 недійсний
14 second_func(foo&)
15 {
16}
17
18 /* Давайте прокоментуємо визначення third_func()
19 недійсний
20 third_func()
21 {
22}
23 */
$

· Скомпілювати першу та другу версії бібліотек: libtest-0.so та
libtest-1.so:

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

· Скомпілювати програму та зв'язати її з першою версією бібліотеки,
створення тестова програма двійковий:

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

· Тепер використовуйте абікомпат щоб перевірити, чи сумісний libtest-1.so ABI з додатком, з повагою
до ABI libtest-0.so:

$ abicompat test-app libtest-0.so libtest-1.so
Файл ELF 'test-app' може бути несумісним з ABI з 'libtest-1.so' через відмінності з 'libtest-0.so' нижче:
Зміни функцій: 0 Вилучено, 2 Змінено, 0 Додано функцій
Підсумок змін змінних: 0 видалено, 0 змінено, 0 додано змінну

2 функції з деякими непрямими змінами підтипів:

[C]'function foo* first_func()' має деякі непрямі зміни підтипів:
тип повернення змінено:
в вказав на тип 'struct foo':
розмір змінено з 32 до 64 біт
1 вставка елемента даних:
'char foo::m1', зі зміщенням 32 (у бітах)
[C]'function void second_func(foo&)' має деякі непрямі зміни підтипу:
параметр 0 типу 'foo&' має зміни підтипу:
Як повідомлялося раніше, змінено тип посилання "struct foo".

$

· Тепер використовуйте слабкий режим abicompat, тобто надаєте лише програму та
нова версія бібліотеки:

$ abicompat --weak-mode test-app libtest-1.so
функції, визначені в бібліотеці
'libtest-1.so'
мають підтипи, які відрізняються від програми
'test-app'
очікує:

функція foo* first_func():
тип повернення змінено:
в вказав на тип 'struct foo':
розмір змінено з 32 до 64 біт
1 вставка елемента даних:
'char foo::m1', зі зміщенням 32 (у бітах)

$

Використовуйте abicompat онлайн за допомогою служб onworks.net


Безкоштовні сервери та робочі станції

Завантажте програми для Windows і Linux

Команди Linux

Ad