Яка різниця між файлами .a та .so?


Відповіді:


54

.aФайл є статичною бібліотекою, а .soфайл є загальним об'єкт (динамічна) бібліотека схожа на DLL на Windows. Там якась - то докладна інформація про відмінності між ними на цій сторінці .


18
.aможе бути включено лише як частина програми під час компіляції. .soможна імпортувати, поки програма завантажується.
LawrenceC

2
що означає .a означає?
hfrmobile

2
@hfrmobile Стенди для архіву - статична бібліотека - це набір об’єктних файлів, створених за допомогою arутиліти. Більше інформації тут
ajk

28

Як далі, файл .a - це архів "ar". На відміну від архіву tar, він зберігає .o або файли об’єктів, дозволяючи витягнути їх з архіву і пов’язати між собою в програму, серед іншого. Ви можете використовувати ar для зберігання інших файлів, якщо хочете.

Ви можете отримати список членів файлу ar з параметром -t, наприклад:

ar -t /usr/lib/libc.a

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

Наприклад, спробуйте:

objdump -T /lib/libc-2.11.1.so

(або будь-яку версію libc.so, що у вас в каталозі / lib.) Зауважте, що файл .so також може містити сценарій посилання, який спрямовує його на пошук файлу в іншому місці, або використовувати щось інше.

Цікаво, що файл .so також може бути повноцінною програмою. Наприклад, спробуйте запустити /lib/libc.so.6 . (На жаль, ця остання частина, здається, не працює на більш сучасних системах. Не те, що це велика втрата.)


Друкарська помилка. ти маєш на увазі писати ar -t /usr/lib/libc.a. Насправді -це не здається необхідним у цьому випадку. Також /lib/libc.so.6.просто надрукує деякий вихід. Я не знаю, чи називав би я це full fledged program.
Faheem Mitha

1
Це повноцінна програма в тому сенсі, що вона є головним символом для пошуку exec.
Hack Saw

2
Ви також можете працювати lddна .so's, і він покаже, які інші бібліотеки він використовує. Static повернеться з повідомленням, що це не динамічна бібліотека.
Марцін
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.