Jaka jest różnica między plikami bibliotek .so, .la i .a?

230

Wiem, że .soplik jest rodzajem biblioteki dynamicznej (wiele wątków może współdzielić takie biblioteki, więc nie trzeba mieć więcej niż jednej kopii w pamięci). Ale jaka jest różnica między .ai .la? Czy to są wszystkie biblioteki statyczne?

Jeśli biblioteki dynamiczne mają duże zalety w stosunku do bibliotek statycznych, dlaczego wciąż istnieje wiele bibliotek statycznych?

Chcę również poznać podstawowy mechanizm ładowania bibliotek (oba rodzaje) oraz sposób wywoływania fragmentu kodu w bibliotece lib, gdy jest ona gdzieś używana. Którą część jądra powinienem studiować? A jakie pokrewne polecenie / narzędzie Linux powinienem wiedzieć, aby wiedzieć, jak działa proces? (Do tej ldpory znam tylko polecenie)

Kiedy powinienem spróbować wbudować kod w .solub .a? Który jest lepszy?

[mirror@home ins_openvpn]$ ls lib/openvpn/plugins/ -l
total 96
-rw-r--r-- 1 mirror mirror 22892 Sep  2 23:25 openvpn-plugin-auth-pam.a
-rwxr-xr-x 1 mirror mirror   931 Sep  2 23:25 openvpn-plugin-auth-pam.la
-rwxr-xr-x 1 mirror mirror 23621 Sep  2 23:25 openvpn-plugin-auth-pam.so
-rw-r--r-- 1 mirror mirror 17228 Sep  2 23:25 openvpn-plugin-down-root.a
-rwxr-xr-x 1 mirror mirror   932 Sep  2 23:25 openvpn-plugin-down-root.la
-rwxr-xr-x 1 mirror mirror 18805 Sep  2 23:25 openvpn-plugin-down-root.so
hugemeow
źródło
Zobacz także autotools.io/libtool/lafiles.html
Pacerier

Odpowiedzi:

306

.sopliki są bibliotekami dynamicznymi . Sufiks oznacza „obiekt współdzielony”, ponieważ wszystkie aplikacje połączone z biblioteką używają tego samego pliku, zamiast tworzyć kopię w wynikowym pliku wykonywalnym.

.apliki są bibliotekami statycznymi . Sufiks oznacza „archiwum”, ponieważ w rzeczywistości są one po prostu archiwum (wykonanym za pomocą arpolecenia - poprzednika, tarktóry jest teraz używany do tworzenia bibliotek) oryginalnych plików obiektowych .o.

.laPliki to pliki tekstowe używane przez pakiet GNU „libtools” do opisywania plików, które tworzą odpowiednią bibliotekę. Więcej informacji na ich temat można znaleźć w tym pytaniu: Do czego służy plik .la libtoola?

Każda biblioteka statyczna i dynamiczna ma swoje wady i zalety.

Static pro: użytkownik zawsze korzysta z wersji biblioteki przetestowanej z aplikacją, więc nie powinno być żadnych zaskakujących problemów ze zgodnością.

Konfekcja statyczna: jeśli problem został rozwiązany w bibliotece, musisz ponownie rozpowszechnić aplikację, aby z niej skorzystać. Jednak jeśli nie jest to biblioteka, którą użytkownicy mogą aktualizować samodzielnie, być może i tak będzie to konieczne.

Dynamic pro: ślad procesowy pamięci jest mniejszy, ponieważ pamięć używana dla biblioteki jest amortyzowana między wszystkimi procesami korzystającymi z biblioteki.

Dynamic pro: biblioteki mogą być ładowane na żądanie w czasie wykonywania; jest to dobre dla wtyczek, więc nie musisz wybierać wtyczek, które będą używane podczas kompilacji i instalacji oprogramowania. Nowe wtyczki można dodawać na bieżąco.

Konwersja dynamiczna: biblioteka może nie istnieć w systemie, w którym ktoś próbuje zainstalować aplikację, lub może mieć wersję niezgodną z aplikacją. Aby to złagodzić, pakiet aplikacji może wymagać dołączenia kopii biblioteki, aby w razie potrzeby mógł ją zainstalować. Jest to również często łagodzone przez menedżerów pakietów, którzy mogą pobierać i instalować wszelkie niezbędne zależności.

Biblioteki dynamiczne są szczególnie przydatne dla bibliotek systemowych, takich jak libc. Te biblioteki często muszą zawierać kod zależny od konkretnego systemu operacyjnego i wersji, ponieważ interfejsy jądra uległy zmianie. Jeśli połączysz program ze statyczną biblioteką systemową, będzie on działał tylko w wersji systemu operacyjnego, dla której została napisana ta wersja biblioteki. Ale jeśli użyjesz biblioteki dynamicznej, automatycznie pobierze bibliotekę zainstalowaną w systemie, na którym pracujesz.

Barmar
źródło
1
@Barmar, więc mówisz, że zalety bibliotek statycznych przewyższają zalety bibliotek dynamicznych?
Pacerier
4
@Pacerier Nie wiem skąd to masz.
Barmar
13
To bezsensowne pytanie. Waga za i przeciw zależy od okoliczności, nie ma uniwersalnej odpowiedzi. Wygląda na to, że masz plan i próbujesz mnie przynęty.
Barmar
3
@Barmar, Nop Jestem niewinny. Po prostu ciekawy.
Pacerier
11
Innym czynnikiem jest licencjonowanie - LGPL wymaga dynamicznego linkowania w kontekście komercyjnym, tzn. Tam, gdzie nie chcesz rozpowszechniać swojego źródła.
Sam