Quelle est la différence entre un fichier binaire et une bibliothèque?

11

J'essaie de comprendre la norme de hiérarchie du système de fichiers. J'ai recherché à la fois des fichiers binaires et des bibliothèques, et si je comprends bien:

les binaires sont des fichiers de code lisible par ordinateur au format binaire, qui contrôlent le CPU et le processeur directement avec des bits.

Les bibliothèques sont des fonctions utilisables par divers programmes, par souci de commodité, comme lorsque vous avez besoin d'un module en Javascript de PHP.

Cette compréhension est-elle correcte? Si c'est le cas, pourquoi séparons-nous toujours les bibliothèques et les binaires? Certaines bibliothèques sont des binaires, non? Et certains binaires (cat, less, date, rm, cp, etc.) sont utilisés et réutilisés comme s'ils étaient des bibliothèques ... Quelqu'un peut-il expliquer la différence et m'aider à trouver de meilleures définitions pour ces deux mots? Je vous remercie.

houallet
la source

Réponses:

10

Votre compréhension est généralement correcte, mais il y a quelques points supplémentaires à considérer:

  1. «binaire» fait référence à quelque chose qui n'est pas lisible par l'homme. Cela fait généralement référence au code machine, mais de nombreux autres fichiers sont également des fichiers binaires dans ce sens, la plupart des formats multimédias étant un bon exemple. Le FHS a cependant une utilisation plus spécifique pour le terme.
  2. Les bibliothèques peuvent être du code binaire. En fait, la plupart des contenus /libseront des bibliothèques compilées en code machine.
  3. Alors que des choses comme catsont utilisées dans un script shell comme les appels au code dans les bibliothèques, ce ne sont pas des bibliothèques au sens FHS car elles peuvent être exécutées par elles-mêmes.

En conséquence de ces points, la terminologie la plus courante chez les personnes qui n'écrivent pas de documents normatifs est:

  • Fichiers objets: ce sont des codes machine compilés en mode natif, mais ils peuvent même ne pas s'exécuter ou être appelables. Ils ont généralement une .oextension, sauf s'ils entrent dans l'une des autres catégories, et ne sont presque jamais vus sur la plupart des systèmes, sauf lors de la création de logiciels. Je les ai énumérés ici car ils sont importants pour comprendre certaines choses ci-dessous.

  • Fichiers exécutables: il s'agit de fichiers composés principalement de code autonome pouvant être exécuté directement. Ils peuvent être soit des fichiers objets spécialement formatés qui peuvent être chargés directement par le noyau ( des choses comme cat, bashet pythonsont ce type de fichier exécutable), ou sont interprétées par un programme intermédiaire qui lui - même est un exécutable (Minecraft, pydocet cowsaysont tous des exemples de ce type d'exécutable). Les exécutables du premier type n'ont presque jamais d'extension de fichier sur les systèmes UNIX, tandis que les exécutables du second type peuvent ou non l'être. C'est ce que le FHS appelle les «binaires». Ils peuvent être exécutés à partir d'autres exécutables, mais nécessitent d'appeler des fonctions spéciales pour les appeler ( fork()et exec()en C et C ++, les choses hors dusubprocess module en Python, etc.) et exécuté en tant que processus distinct.

  • Bibliothèques: ce sont des fichiers qui contiennent du code réutilisable qui peut être invoqué par une autre bibliothèque ou un exécutable. Le code dans les bibliothèques est invoqué (principalement) directement par un autre code une fois que la bibliothèque est chargée (appelée `` liaison '' lorsque l'on parle de code compilé), et s'exécute dans le même processus que le code qui l'appelle. Il existe trois types génériques de bibliothèques:

    1. Bibliothèques statiques: il s'agit de la variété d'origine. Ils se composent d'un fichier archive (généralement au format AR) avec un grand nombre de fichiers objets à l'intérieur, un pour chaque fonction de la bibliothèque. Les fichiers objets sont liés à l'exécutable qui les utilise, donc un exécutable qui utilise uniquement des bibliothèques statiques est essentiellement 100% indépendant de tout autre code. Sur les systèmes UNIX, ils ont généralement une .aextension. Le concept de bibliothèques statiques n'existe pas vraiment en dehors des langages de programmation compilés.
    2. Bibliothèques dynamiques: il s'agit du type de bibliothèque le plus couramment utilisé aujourd'hui. Une bibliothèque dynamique est un fichier objet spécial, généralement avec une .soextension sous UNIX ( .dllc'est la norme sous Windows), qui est chargé au moment de l'exécution par les exécutables qui l'utilisent. La plupart de ce que vous trouverez dans /libles systèmes de production sont des bibliothèques dynamiques.
    3. Modules: C'est l'équivalent d'une bibliothèque dynamique pour un langage interprété. La gestion est un peu différente de celle d'un langage compilé, et contrairement à un langage compilé, il est possible qu'un fichier soit à la fois un module et un exécutable (voir http.serverdans la bibliothèque standard Python pour un exemple).
Austin Hemmelgarn
la source
Sans oublier les fichiers de script, qui sont un cas particulier des exécutables, car ils dépendent d'un exécutable binaire ( bash, python) à exécuter. De plus, les scripts /libpeuvent être destinés à être utilisés par d'autres scripts; comparer les modules Python.
Murphy
1
Cela tombe sous «interprété par un programme intermédiaire . Tow of the examples I listed for that (pydoc» et cowsay) sont des scripts.
Austin Hemmelgarn
Clarification à # 3 - les modules sont des bits de code chargeables utilisés pour étendre les fonctionnalités. Les modules Apache / php sont un bon exemple pour votre partie de scripts interprétés, mais les modules du noyau comptent aussi ... J'ajouterais également un point pour couvrir les langages interprétés principalement lisibles par l'homme comme les scripts pour les différents shells, php, perl, etc. qui par FHS irait dans un répertoire / bin ou / sbin car ce sont des programmes exécutables
ivanivan
Les modules comme extensions sont plus souvent appelés plugins. Le choix de nommage d'Apache était basé sur l'ancien standard UNIX d'appeler les modules de pilotes du noyau, et c'est maintenant devenu une terminologie courante avec les serveurs Web (à cause du marketing), mais c'est un cas étrange par rapport à la plupart des autres logiciels, qui utilisent assez universellement l'un ou l'autre des plugins "ou" extension "lorsque vous vous référez à cela.
Austin Hemmelgarn