2008-10-31 21 views
1

Je me demande quelle est la valeur possible pour * _la_LDFLAGS dans Makefile.am?Automake: quelles sont les valeurs valides pour * _la_LDFLAGS dans Makefile.am?

Si je pose cette question, il est parce que je voudrais ce qui suit:

Actual shared library : libA.so (or with the version number I don't care) 
Symbolic links :  libA-X.Y.Z.so, libA-X.so, libA.so 
soname :    libA-X.so 

Mais voici ce que je reçois en utilisant le -release drapeau:

Actual shared library : libA-X.Y.Z.so 
Symbolic links :  libA.so 
soname :    libA-X.Y.Z.so !!! this is not what I want 

J'ai aussi essayé avec aucun drapeaux du tout et a obtenu

Actual shared library : libA-0.0.0.so !!! 0.0.0 and not the real version 
Symbolic links :  libA.so, libA-0.so 
soname :    libA-0.so  !!! 0.0.0 and not the real version 

Comment sh ould je fais? quel drapeau dois-je utiliser?

Merci à l'avance

Répondre

2

Vous devez utiliser l'option -version-info de Libtool pour spécifier la version d'interface de la bibliothèque, mais assurez-vous de lire how versioning works (ou here pour le manuel officiel.)

Vous pouvez En outre, jouer avec -release pour rendre le numéro de version de votre paquet plus apparent, mais je doute que vous obtiendrez jamais le nom exact que vous souhaitez. Libtool a son propre ensemble de règles pour définir comment nommer le fichier et quels liens symboliques créer en fonction du système: ils doivent être considérés comme des détails d'implémentation de l'installation d'une bibliothèque partagée.

1

À mon humble avis, la mise en page que vous voulez est cassée. Les applications qui sont liées à votre bibliothèque dépendront de libA-X.so à cause du soname. Mais que se passe-t-il lorsque libA.so est la version X + 1? A quoi servira le lien symbolique libA-X.so? L'idée derrière la mise en page que vous obtenez avec le drapeau -release est que lorsqu'une application est liée à -lA, elle sera liée à la dernière version. Il va alors, à cause du soname, dépendre de libA-X.Y.Z.so à l'exécution. Lorsque vous installez une nouvelle version de la bibliothèque, cela va installer une nouvelle libA-X.Y.Q.so, mais elle laissera l'ancienne seule - exactement comme les anciennes applications qui en dépendent. En raison du lien symbolique libA, les nouvelles applications resteront liées à la dernière version. Des années de réflexion de personnes très intelligentes sont entrées dans un schéma de versionnement qui permet à de nouvelles applications de se lier à la dernière version d'une bibliothèque, tout en permettant à plusieurs versions de coexister pacifiquement pour satisfaire les dépendances des applications qui en ont besoin. Mon conseil est, ne pas deviner tout cela.

+0

Eh bien, je comprends ce que vous dites. Cependant, imaginez que j'ai une bibliothèque B liée à libA-X.Y.Z.so et que je libère libA-X.Y.Q.so. Si je crée des RPM et que j'utilise YUM, je dois spécifier pour le paquet B que libA = XYZ au lieu de libA> = XYZ, et j'ai le sentiment qu'il est trop restrictif car ... – Barth

+0

lib B pourrait utiliser la version supérieure sans problème . Vous pouvez voir cette autre question pour mieux comprendre ce qui me dérange avec l'utilisation de -release: http://stackoverflow.com/questions/252819/c-how-to-link-against-libaso-and-not-liba-xyzso – Barth