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

O ile rozumiem, są to biblioteki, ale jaka jest między nimi różnica?

Komentarze

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 to full 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ą.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *