Що таке файли .a та .so?


427

На даний момент я намагаюся перенести додаток C на AIX і я заплутався. Що таке файли .a та .so і як вони використовуються під час створення / запуску програми?


116
одна бібліотека archive і інша sХаред o▪ Таблиця
Shiplu Mokaddim

Відповіді:


483

Бібліотеки архівів (.a) статично пов'язані, тобто коли ви компілюєте свою програму з опцією -c у gcc. Отже, якщо в бібліотеці є якісь зміни, вам потрібно скомпілювати і скласти свій код заново.

Перевага .so (спільного об'єкта) над бібліотекою .a полягає в тому, що вони підключаються під час виконання, тобто після створення вашого .o-файла--опції в gcc. Отже, якщо в файлі .so є якісь зміни, вам не потрібно перекомпілювати свою основну програму. Але переконайтеся, що ваша основна програма пов'язана з новим файлом .so з командою ln.

Це допоможе вам створити файли .so. http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html

Сподіваюсь, це допомагає.


2
чи стосується будь-якого з них pic(незалежний від позиції код)?
трансанг

213

.a - статичні бібліотеки. Якщо ви використовуєте код, що зберігається всередині них, він береться з них і вбудовується у ваш власний бінарний файл. У Visual Studio це були .lib файли.

.так є динамічними бібліотеками. Якщо ви використовуєте код, що зберігається всередині них, він не береться і не вбудовується у ваш власний бінарний файл. Натомість це просто посилання, тому двійковий файл буде залежати від них, і код з файлу so додається / завантажується під час виконання. У Visual Studio / Windows це були файли .dll (з невеликими .lib-файлами, що містять посилання на інформацію).


привіт, чи є можливість декомпілювати файл .so у c / c ++ код?
Джишант

@Ancee: погляд на це питання: stackoverflow.com/questions/205059/is-there-ac-decompiler
Paul Wintz

Невеликий .libфайл для .dllназивається бібліотекою імпорту.
Програміст, орієнтований на гроші,

13

.a файли, як правило, є бібліотеками, які стаціонарно пов'язані (або, точніше, архіви), і
.so є динамічно пов'язаними бібліотеками.

Щоб зробити порт, вам знадобиться вихідний код, який був складений для їх створення, або еквівалентні файли на вашій машині AIX.


Як створити свою програму для використання .so файлів?
Данк

Існує безліч відмінних посилань на створення обох типів бібліотек та посилання на них в Інтернеті. Google - ваш друг.
Девід Пойнтер

@Dunc - Є кілька способів. У вас є makefile? Зазвичай команда, яка збирає всю програму (і, отже, викликає лінкер), визначає місця для пошуку бібліотечних файлів з -L / dir / dir1 /.../, а також може називати бібліотеки явно з -lname. Ви побачите, що власне ім’я - libname.a або libname.so. Потім лінкер може зрозуміти, що робити, якщо це досить нормальна програма. Але у вас все ще виникає проблема створення або пошуку файлу .so. У вас є вихідний код для його побудови, або бібліотека AIX?
габлмер

10

Їх використовують у стадії зв’язування. .aФайли є статично пов'язаними, а .soфайли начебто пов'язані, так що бібліотека потрібна щоразу, коли ви запускаєте exe.

Ви можете знайти, де вони зберігаються, переглянувши будь-який із каталогів lib ... /usr/libі /libмаєте більшість із них, а також є LIBRARY_PATHзмінна середовище.


0

Вікіпедія - гідне джерело для цієї інформації.

Щоб дізнатися про статичні файли бібліотеки, такі як .a, прочитайте Статичний лібератор

Щоб дізнатися про файли спільної бібліотеки, такі як .so read Library_ (computing) #Shared_libraries На цій сторінці також є корисна інформація у розділі Ім'я файлів .

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