¿Para qué sirven los archivos .la de libtool?

Respuestas:

139

Es un archivo de texto que incluye una descripción de la biblioteca.

Permite libtoolcrear nombres independientes de la plataforma.

Por ejemplo, libfoova a:

Bajo 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

Debajo de Cygwin :

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

En Windows MinGW:

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

Entonces, libfoo.laes el único archivo que se conserva entre plataformas al libtoolpermitir comprender lo que sucede con:

  • Dependencias de la biblioteca
  • Nombres de archivo reales
  • Versión y revisión de la biblioteca.

Sin depender de una plataforma específica de implementación de bibliotecas.

Artyom
fuente
55
Entonces, ¿cómo convertir el archivo .la en un archivo lib compartido específico de la plataforma, como libfoo.la -> libfoo.so. *
theactiveactor el
66
No puede libfoo.la solo contiene metainformación, es decir, en libfoo.la (archivo de texto) escrito donde debería encontrar libfoo.so.xyz
Artyom
44
¿Significa que para generar el archivo .la, necesito usar libtool (por ejemplo, de automake)? Se puede confiar libtoolpara vincular los archivos de objeto ( gnu.org/software/libtool/manual/html_node/Using-Automake.html ) pero si quiero distribuir una biblioteca sin .la, significa que será muy difícil vincular con él usando Cygwin o mingw?
dma_k
En caso de que alguien quiera deshabilitar esta versión, puede usar -avoid-version en sus _la_LDFLAGS, en lugar de -version-info
laishiekai
14

De acuerdo con http://blog.flameeyes.eu/2008/04/14/what-about-those-la-files , son necesarios para manejar las dependencias. Pero usar pkg-config puede ser una mejor opción:

En un mundo perfecto, cada biblioteca estática que necesite dependencias tendría su propio archivo .pc para pkg-config, y cada paquete que intente vincular estáticamente a esa biblioteca usaría pkg-config --static para que las bibliotecas se vinculen.

Thomas Leonard
fuente
10

Encontré una muy buena explicación sobre los archivos .la aquí http://openbooks.sourceforge.net/books/wga/dealing-with-libraries.html

Resumen (tal como lo entendí): dado que libtool trata con bibliotecas estáticas y dinámicas internamente (a través de --diable-shared o --disable-static) crea un contenedor en los archivos de biblioteca que crea. Se tratan como archivos de biblioteca binarios con un entorno compatible con libtool.

Rak
fuente