Jaka jest różnica między plikiem .a a .so?


Odpowiedzi:


54

.aPlik jest biblioteka statyczna, podczas gdy .soplik jest udostępniony obiekt (dynamiczny) biblioteka podobna do DLL w systemie Windows. Istnieje kilka szczegółowych informacji na temat różnic między tymi dwoma na tej stronie .


18
.amoże być uwzględniony tylko jako część programu podczas kompilacji. .somożna „importować” podczas ładowania programu.
LawrenceC

2
co oznacza .a?
hfrmobile

2
@hfrmobile A oznacza archiwum - biblioteka statyczna to zbiór plików obiektowych utworzonych za pomocą arnarzędzia. Więcej informacji tutaj
ajk

28

W dalszej kolejności plik .a jest archiwum „ar”. Podobnie jak archiwum tar, przechowuje pliki .o lub pliki obiektów, pozwalając między innymi na ich wyciągnięcie z archiwum i połączenie z programem. Możesz użyć ar do przechowywania innych plików, jeśli chcesz.

Możesz uzyskać listę członków pliku ar z parametrem -t, na przykład:

ar -t /usr/lib/libc.a

Plik .so jest plikiem „obiektu współdzielonego” i zawiera o wiele więcej informacji dostępnych dla linkera, dzięki czemu członkowie mogą zostać jak najszybciej połączeni z programem ładującym.

Na przykład spróbuj:

objdump -T /lib/libc-2.11.1.so

(lub dowolną wersję libc.so, którą masz w katalogu / lib). Zauważ, że plik .so może również zawierać skrypt łączący, kierujący go do znalezienia pliku w innym miejscu, lub użyć czegoś innego.

Co ciekawe, plik .so może być także pełnoprawnym programem. Na przykład próba uruchomienia /lib/libc.so.6 . (Niestety, ta ostatnia część nie wydaje się działać na bardziej nowoczesnych systemach. Nie jest to wielka strata.)


Literówka masz na myśli pisać ar -t /usr/lib/libc.a. W rzeczywistości -nie wydaje się to konieczne w tym przypadku. Również /lib/libc.so.6.drukuje tylko niektóre dane wyjściowe. Nie wiem czy nazwałbym to full fledged program.
Faheem Mitha

1
Jest to pełnoprawny program w tym sensie, że ma główny symbol exec do znalezienia.
Hack Saw

2
Możesz także uruchomić ldd.so, a pokaże ci, jakich innych bibliotek używa. Statyczny zwróci komunikat z informacją, że nie jest to biblioteka dynamiczna.
Marcin
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.