Odpowiedzi:
.a
Plik jest biblioteka statyczna, podczas gdy .so
plik 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 .
.a
może być uwzględniony tylko jako część programu podczas kompilacji. .so
można „importować” podczas ładowania programu.
ar
narzędzia. Więcej informacji tutaj
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.)
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
.
ldd
.so, a pokaże ci, jakich innych bibliotek używa. Statyczny zwróci komunikat z informacją, że nie jest to biblioteka dynamiczna.