web-dev-qa-db-fra.com

Où est la différence entre «binaires» et «exécutables» dans le contexte d'un programme exécutable?

Je vois souvent les termes "binaire" et "exécutable" utilisés de manière interchangeable pour la même chose.

N'est-ce pas deux termes pour décrire exactement la même chose; Le programme de sortie exécutable après un processus de compilation, que je peux exécuter sur le terminal?

Ce qui renforce mon hypothèse, que ces deux choses doivent être les mêmes, c'est aussi qu'il est courant de fournir un dossier bin ("bin" comme abréviation de "binaires") dans les dossiers d'installation d'un application, pour stocker les fichiers exécutables dans lesquels les utilisateurs peuvent exécuter.


J'ai lu la question et les réponses de Quelle est la différence entre les fichiers binaires et exécutables mentionnés dans le manuel de ndisasm? mais la question et leur réponse sont plus concentrées sur les environnements respectifs de Clang et ndisasm.

J'ai également lu la question et les réponses de https://softwareengineering.stackexchange.com/questions/121224/what-are-binaries sur le forum de génie logiciel, mais ici aussi aucune distinction entre un exécutable et un binaire; seulement ce à quoi le terme "binaire" en général peut se référer:

Mais, dans Computing , Binary se réfère à:

  • Fichier binaire , composé de quelque chose d'autre qu'un texte lisible par l'homme
  • Exécutable , un type de fichier binaire contenant le code machine que l'ordinateur doit exécuter
  • Code binaire , la représentation numérique du texte et des données

[Source: https://softwareengineering.stackexchange.com/a/121235/349225]

où, dans le contexte du programme de sortie d'un processus de compilation, un binaire était appelé le même qu'un exécutable, ainsi que:

Le mot binaires est utilisé comme un ensemble de fichiers qui sont produits après compilation essentiellement le code objet qui s'exécute sur les machines. (et machines virtuelles/runtimes dans le cas de Java/.NET)

[Source: https://softwareengineering.stackexchange.com/a/121234/349225 ]

où il a été renvoyé au même.


  • Quelle est la différence entre "binaires" et "exécutables" dans le contexte d'un programme exécutable?
  • Où est la distinction?

Un fichier exécutable est un fichier qui peut être exécuté; vous l'exécuteriez sur la ligne de commande en écrivant le nom du fichier lui-même comme commande. Sur les systèmes Unix, l'indicateur "exécutable" du fichier doit également être défini. Sous Windows, l'extension du fichier doit faire partie d'un ensemble fixe d'extensions de fichiers exécutables, y compris .exe.

A fichier binaire est simplement un dans un format binaire (c'est-à-dire non textuel). Le format binaire signifie que le contenu du fichier ne doit pas être transformé pour des raisons spécifiques à la plate-forme (par exemple en remplaçant les nouvelles lignes de \n à \r\n).

Les fichiers binaires ne sont pas nécessairement exécutables, par exemple une bibliothèque compilée en .dll ou .so form est un binaire mais pas un exécutable. A Java programme compilé en .class ou .jar form n'est pas un fichier exécutable, mais peut être exécuté à l'aide de la commande Java -jar program.jar plutôt que la commande ./program.jar.

Les fichiers exécutables ne sont pas nécessairement binaires, par exemple un Python script sous forme de texte peut être rendu exécutable sur les systèmes Unix en écrivant un ligne Shebang#!/usr/bin/python3 et définissant l'indicateur exécutable du fichier.

14
kaya3

Cela aide à comprendre le contexte du terme "binaire" ici. Il provient de compilateurs, qui prennent le code source (basé sur du texte) d'un programme et transforment ce code source en une forme excutable qui est binaire et non basée sur du texte. Ainsi dans le contexte des compilateurs, "texte" et "code source" sont équivalents, tout comme "binaire" et "exécutable". Les interprètes, quant à eux, ne font pas la distinction entre le code source et le code exécutable.

Les choses sont certainement devenues plus complexes avec le temps avec les représentations intermédiaires, telles que celles utilisées par la JVM Java JVM, la CLI de .Net ou Python bytecode.

2
MSalters