Untuk apa file .la libtool?

Jawaban:

139

Ini adalah file tekstual yang menyertakan deskripsi perpustakaan.

Ini memungkinkan libtooluntuk membuat nama platform-independent.

Misalnya, libfoobuka:

Di bawah 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

Di bawah Cygwin :

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

Di bawah Windows MinGW:

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

Jadi libfoo.laadalah satu-satunya file yang dipertahankan antara platform dengan libtoolmemungkinkan untuk memahami apa yang terjadi dengan:

  • Ketergantungan perpustakaan
  • Nama file yang sebenarnya
  • Versi dan revisi perpustakaan

Tanpa tergantung pada platform implementasi perpustakaan tertentu.

Artyom
sumber
5
jadi bagaimana untuk Anda mengubah file .la untuk platform tertentu bersama file lib, seperti libfoo.la -> libfoo.so *.
theactiveactor
6
Anda tidak dapat libfoo.la hanya memegang informasi meta, yaitu di libfoo.la (file teks) yang ditulis di mana Anda harus menemukan libfoo.so.xyz
Artyom
4
Apakah ini berarti bahwa untuk menghasilkan file .la, saya harus menggunakan libtool (misalnya dari automake)? Orang dapat mengandalkan libtooluntuk menautkan file objek ( gnu.org/software/libtool/manual/html_node/Using-Automake.html ) tetapi jika saya ingin mendistribusikan perpustakaan tanpa .la, artinya itu akan sangat sulit untuk ditautkan dengan itu menggunakan Cygwin atau mingw?
dma_k
Jika ada orang yang ingin menonaktifkan hal-hal versi ini, Anda dapat menggunakan -avoid-versi di _la_LDFLAGS Anda, alih-alih -versi-info
laishiekai
14

Menurut http://blog.flameeyes.eu/2008/04/14/what-about-those-la-files , mereka diperlukan untuk menangani dependensi. Tetapi menggunakan pkg-config mungkin merupakan opsi yang lebih baik:

Dalam dunia yang sempurna, setiap pustaka statis yang memerlukan dependensi akan memiliki file .pc untuk pkg-config, dan setiap paket yang mencoba menautkan pustaka ke pustaka itu akan menggunakan pkg-config --static untuk mendapatkan pustaka yang akan ditautkan.

Thomas Leonard
sumber
10

Saya menemukan penjelasan yang sangat bagus tentang file .la di sini http://openbooks.sourceforge.net/books/wga/dealing-with-libraries.html

Rangkuman (Cara saya mengerti): Karena libtool menangani pustaka statis dan dinamis secara internal (melalui --diable-shared atau --disable-static) ia membuat pembungkus pada file pustaka yang dibuatnya. Mereka diperlakukan sebagai file perpustakaan biner dengan lingkungan yang didukung libtool.

Rak
sumber