Відповіді:
.a
Файл є статичною бібліотекою, а .so
файл є загальним об'єкт (динамічна) бібліотека схожа на DLL на Windows. Там якась - то докладна інформація про відмінності між ними на цій сторінці .
.a
може бути включено лише як частина програми під час компіляції. .so
можна імпортувати, поки програма завантажується.
ar
утиліти. Більше інформації тут
Як далі, файл .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
.
ldd
на .so's, і він покаже, які інші бібліотеки він використовує. Static повернеться з повідомленням, що це не динамічна бібліотека.