Wofür ist die .la-Datei von libtool gedacht?

Antworten:

139

Es ist eine Textdatei, die eine Beschreibung der Bibliothek enthält.

Es ermöglicht libtooldie Erstellung plattformunabhängiger Namen.

Zum Beispiel libfoogeht an:

Unter 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

Unter Cygwin :

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

Unter Windows MinGW:

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

Dies libfoo.laist die einzige Datei, die zwischen Plattformen aufbewahrt wird, indem libtoolverstanden wird, was passiert mit:

  • Bibliotheksabhängigkeiten
  • Tatsächliche Dateinamen
  • Bibliotheksversion und -revision

Ohne von einer bestimmten Plattform abhängig Implementierung von Bibliotheken.

Artyom
quelle
5
So wandeln Sie die .la-Datei in eine plattformspezifische gemeinsam genutzte lib-Datei um, wie libfoo.la -> libfoo.so. *
theactiveactor
6
Sie können nicht libfoo.la enthält nur Metainformationen, dh in libfoo.la (Textdatei) geschrieben, wo Sie libfoo.so.xyz
Artyom
4
Bedeutet das, dass ich zum Generieren einer .la-Datei libtool verwenden muss (z. B. von automake)? Man kann sich darauf verlassen libtool, die Objektdateien zu verknüpfen ( gnu.org/software/libtool/manual/html_node/Using-Automake.html ), aber wenn ich eine Bibliothek ohne .la verteilen möchte, bedeutet dies, dass das Verknüpfen sehr schwierig sein wird mit Cygwin oder Mingw?
dma_k
Für den Fall, dass jemand diese Version deaktivieren möchte, können Sie -avoid-version in Ihren _la_LDFLAGS anstelle von -version-info
laishiekai
14

Laut http://blog.flameeyes.eu/2008/04/14/what-about-those-la-files werden sie benötigt, um mit Abhängigkeiten umzugehen. Die Verwendung von pkg-config ist jedoch möglicherweise eine bessere Option:

In einer perfekten Welt hätte jede statische Bibliothek, die Abhängigkeiten benötigt, eine eigene PC-Datei für pkg-config, und jedes Paket, das versucht, eine statische Verknüpfung zu dieser Bibliothek herzustellen, würde pkg-config --static verwenden, um die Bibliotheken zum Verknüpfen zu bringen.

Thomas Leonard
quelle
10

Ich habe hier sehr gute Erklärungen zu .la-Dateien gefunden: http://openbooks.sourceforge.net/books/wga/dealing-with-libraries.html

Zusammenfassung (so wie ich es verstanden habe): Da libtool intern mit statischen und dynamischen Bibliotheken umgeht (über --diable-shared oder --disable-static), wird ein Wrapper für die von ihm erstellten Bibliotheksdateien erstellt. Sie werden als binäre Bibliotheksdateien in einer von libtool unterstützten Umgebung behandelt.

Rak
quelle