O ile rozumiem, są to biblioteki, ale jaka jest między nimi różnica?
Komentarze
- Powiązany post – Czym ' jest różnica między biblioteką .so, .la i .a pliki?
Odpowiedź
A .a
plik jest biblioteką statyczną, podczas gdy plik .so
to współdzielona biblioteka obiektów (dynamiczna) podobna do biblioteki DLL w systemie Windows. Na tej stronie .
Komentarze
-
.a
można dołączyć tylko jako część programu podczas kompilacji..so
' s można " zaimportować " podczas ładowania programu. - co oznacza .a?
- @hfrmobile A oznacza archiwum – biblioteka statyczna to zbiór plików obiektów utworzonych za pomocą narzędzia
ar
. Więcej informacji tutaj
Odpowiedź
Następnie plik .a jest archiwum „ar”. Podobnie jak archiwum tar, przechowuje .o lub obiekt pliki, co pozwala między innymi na wyciągnięcie ich z archiwum i połączenie z programem. Jeśli chcesz, możesz użyć ar do przechowywania innych plików.
Możesz uzyskać listę członków pliku ar za pomocą parametru -t, na przykład:
ar -t /usr/lib/libc.a
Plik .so jest plikiem „obiektu współdzielonego” i ma dużo więcej informacji dostępnych dla konsolidatora, dzięki czemu członkowie mogą być podłączeni do programu ładującego tak szybko, jak to możliwe.
Na przykład spróbuj:
objdump -T /lib/libc-2.11.1.so
(lub jakąkolwiek wersję libc., więc masz w katalogu / lib.) Zauważ, że plik .so może również zawierać skrypt konsolidatora kierujący go do znalezienia plik w innym miejscu lub użyj czegoś innego.
Co ciekawe, plik .so może być również pełnoprawnym programem. Na przykład, próbując uruchomić /lib/libc.so.6 . (Niestety, ta ostatnia część nie wydaje się działać na nowocześniejszych systemach. Nie oznacza to jednak wielkiej straty.)
Komentarze
- Literówka . masz na myśli napisać
ar -t /usr/lib/libc.a
. W rzeczywistości-
nie wydaje się ' t być konieczne w tym przypadku. Ponadto/lib/libc.so.6.
po prostu wypisuje jakieś wyjście. Nie ' nie wiem, czy nazwałbym tofull fledged program
. - To ' jest pełnoprawnym programem w tym sensie, że ma główny symbol do znalezienia exec.
- Możesz także uruchomić
ldd
na .so ' s, i pokaże Ci, jakich innych bibliotek używa. Static zwróci komunikat informujący, że ' nie jest biblioteką dynamiczną.