Pourquoi les packages .so sont-ils fournis par les packages devel?

J'ai vu un model intéressant dans l'emballage RPM. La bibliothèque principale comprendra la bibliothèque partagée elle-même:

/usr/lib64/libavcodec.so.54 

Le packageage -devel fournira des en-têtes et un lien symbolique:

 /usr/include/libavcodec/libavcodec.h /usr/lib64/libavcodec.so -> /usr/lib64/libavcodec.so.54 

Pourquoi le lien symbolique libavcodec.so est-il fourni par le package devel et non seulement inclus dans le package de la bibliothèque partagée? Qu'en est-il le lien symbolique a quelque chose à voir avec quelque chose qu'un développeur voudrait? Les en-têtes ont un sens, mais pourquoi le lien symbolique vers l'object partagé?

Le logiciel de la dissortingbution est lié mécaniquement de manière cohérente et s'attend à find libavcodec.so.54 , de sorte que le nom non versionné n'est requirejs pour aucun des packages préconfigurés.

Si vous construisez vous-même un logiciel, il est courant d'utiliser -lavcodec ou similaire, qui finda libavcodec.so version. De même, les scripts de construction peuvent s'attendre à ce que ces noms existent.

Les noms non versionnés ne sont pas obligatoires pour les packages de dissortingbution, ils ne sont donc pas inclus par défaut, mais comme ils sont utiles lors de la construction d'autres logiciels, ils sont inclus dans le package -devel . D'autres dissortingbutions font différentes délimitations et incluent le lien .so dans le package principal; les deux sont des choix raisonnables.

Il existe différentes manières de gérer cela, mais, dans l'set, il n'aurait pas besoin d'être manipulé si vous n'aviez pas utilisé la gestion automatisée des packages. En fait, la plupart du travail effectué par les gestionnaires de packages automatisés est fait uniquement pour corriger les problèmes causés par la gestion automatisée des packages. Cela ne veut pas dire qu'il n'y a aucune valeur dans les gestionnaires de packages, juste que la valeur ajoutée est coûteuse en termes de surcorrection nécessaire après coup.

Lorsque vous définissez une méthode de gestion de packages, vous vous enregistrez. Vous confiez le contrôle de vos rootfs à un schéma ou à un autre et ses excensortingcités sont quelque chose que vous devez accepter à partir de ce moment-là, être codépendante sur tout autre file et la seule façon de savoir est de démêler tout le web jusqu'à ce que vous puissiez voir le fond.

Les gestionnaires de package tissent le web dans, entre et sur les threads de bibliothèque liés dynamicment. Les solutions de gestion de package reposent généralement sur une binding dynamic – il est plus facile pour les gestionnaires de packages de contrôler la version si toute une suite d'applications peut générer la même lib. Et donc, les gestionnaires de packages se différencient principalement par leurs stratégies de gestion des versions dynamics des bibliothèques, en particulier dans un environnement FHS , car l'tree racine est vraiment la seule autre variable majeure du puzzle. Vous avez souligné l'un de ces schémas typiques de apt .