À quoi sert le fichier .la de libtool?

Réponses:

139

Il s'agit d'un fichier texte qui comprend une description de la bibliothèque.

Il permet libtoolde créer des noms indépendants de la plateforme.

Par exemple, libfoova à:

Sous 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

Sous Cygwin :

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

Sous Windows MinGW:

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

C'est donc libfoo.lale seul fichier qui est conservé entre les plateformes en libtoolpermettant de comprendre ce qui se passe avec:

  • Dépendances de la bibliothèque
  • Noms de fichiers réels
  • Version et révision de la bibliothèque

Sans dépendre d'une plateforme d'implémentation spécifique des bibliothèques.

Artyom
la source
5
alors comment transformer le fichier .la en un fichier lib partagé spécifique à la plate-forme, comme libfoo.la -> libfoo.so. *
theactiveactor
6
Vous ne pouvez pas libfoo.la ne contient que des méta-informations, c'est-à-dire dans libfoo.la (fichier texte) écrit où trouver libfoo.so.xyz
Artyom
4
Cela signifie-t-il que pour générer un fichier .la, je dois utiliser libtool (par exemple à partir d'automake)? On peut compter sur libtoolpour lier les fichiers objets ( gnu.org/software/libtool/manual/html_node/Using-Automake.html ) mais si je veux distribuer une bibliothèque sans .la, cela signifie-t-il qu'il sera très difficile de lier avec lui en utilisant Cygwin ou mingw?
dma_k
Au cas où quelqu'un voudrait désactiver cette version, vous pouvez utiliser -avoid-version dans votre _la_LDFLAGS, au lieu de -version-info
laishiekai
14

Selon http://blog.flameeyes.eu/2008/04/14/what-about-those-la-files , ils sont nécessaires pour gérer les dépendances. Mais utiliser pkg-config peut être une meilleure option:

Dans un monde parfait, chaque bibliothèque statique nécessitant des dépendances aurait son propre fichier .pc pour pkg-config, et chaque paquet essayant de se lier statiquement à cette bibliothèque utiliserait pkg-config --static pour obtenir le lien vers les bibliothèques.

Thomas Leonard
la source
10

J'ai trouvé de très bonnes explications sur les fichiers .la ici http://openbooks.sourceforge.net/books/wga/dealing-with-libraries.html

Résumé (La façon dont j'ai compris): Parce que libtool traite les bibliothèques statiques et dynamiques en interne (via --diable-shared ou --disable-static), il crée un wrapper sur les fichiers de bibliothèque qu'il construit. Ils sont traités comme des fichiers de bibliothèque binaires dans l'environnement pris en charge par libtool.

Rak
la source