Do czego służy plik .la libtool?

Odpowiedzi:

139

Jest to plik tekstowy zawierający opis biblioteki.

Pozwala libtoolna tworzenie nazw niezależnych od platformy.

Na przykład libfooidzie do:

W systemie Linux:

/lib/libfoo.so       # Symlink to shared object
/lib/libfoo.so.1     # Symlink to shared object
/lib/libfoo.so.1.0.1 # Shared object
/lib/libfoo.a        # Static library
/lib/libfoo.la       # 'libtool' library

Pod Cygwinem :

/lib/libfoo.dll.a    # Import library
/lib/libfoo.a        # Static library
/lib/libfoo.la       # libtool library
/bin/cygfoo_1.dll    # DLL

W systemie Windows MinGW:

/lib/libfoo.dll.a    # Import library
/lib/libfoo.a        # Static library
/lib/libfoo.la       # 'libtool' library
/bin/foo_1.dll       # DLL

libfoo.laJest to więc jedyny plik zachowywany między platformami, libtoolumożliwiając zrozumienie, co się dzieje z:

  • Zależności bibliotek
  • Rzeczywiste nazwy plików
  • Wersja i rewizja biblioteki

Bez uzależnienia od konkretnej platformy implementacji bibliotek.

Artem
źródło
5
więc jak zamienić plik .la na współdzielony plik biblioteki specyficzny dla platformy, taki jak libfoo.la -> libfoo.so. *
theactiveactor
6
Nie możesz libfoo.la przechowuje tylko metainformacje, tj. W libfoo.la (plik tekstowy) zapisane gdzie powinieneś znaleźć libfoo.so.xyz
Artyom
4
Czy to oznacza, że ​​aby wygenerować plik .la muszę użyć libtool (np. Z automake)? Można polegać na libtoollinkowaniu plików obiektowych ( gnu.org/software/libtool/manual/html_node/Using-Automake.html ), ale jeśli chcę dystrybuować bibliotekę bez .la, oznacza to, że będzie to bardzo trudne za pomocą Cygwin lub mingw?
dma_k
W przypadku, gdy ktoś chce wyłączyć tę wersję, możesz użyć -avoid-version w swoim _la_LDFLAGS, zamiast -version-info
laishiekai
14

Według http://blog.flameeyes.eu/2008/04/14/what-about-those-la-files są one potrzebne do obsługi zależności. Ale użycie pkg-config może być lepszą opcją:

W idealnym świecie każda statyczna biblioteka wymagająca zależności miałaby swój własny plik .pc dla pkg-config, a każdy pakiet próbujący statycznie połączyć się z tą biblioteką używałby pkg-config --static, aby pobrać biblioteki do połączenia.

Thomas Leonard
źródło
10

Znalazłem bardzo dobre wyjaśnienie dotyczące plików .la tutaj http://openbooks.sourceforge.net/books/wga/dealing-with-libraries.html

Podsumowanie (tak jak zrozumiałem): Ponieważ libtool zajmuje się wewnętrznie bibliotekami statycznymi i dynamicznymi (poprzez --diable-shared lub --disable-static), tworzy opakowanie na tworzonych plikach bibliotek. Są one traktowane jako binarne pliki bibliotek w środowisku obsługiwanym przez libtool.

Rak
źródło