Language agnostic “之间的区别在哪里?”;“二进制文件”;及;“可执行文件”;在可执行程序的上下文中?

Language agnostic “之间的区别在哪里?”;“二进制文件”;及;“可执行文件”;在可执行程序的上下文中?,language-agnostic,executable,binaryfiles,terminology,Language Agnostic,Executable,Binaryfiles,Terminology,我经常看到术语“二进制”和“可执行文件”似乎可以互换地用于同一事物 描述完全相同的事物不是两个术语吗;编译过程后的可执行输出程序,我可以在终端上运行吗 加强我的假设的是,这两件事应该是一样的,这是一种常见的做法,即在应用程序的安装文件夹中提供一个bin文件夹(“bin”作为“二进制文件”的缩写),以存储用户能够运行的可执行文件 我已经阅读了的问题和答案,但问题和答案更侧重于Clang和NDISAM各自的环境 我也在软件工程论坛上阅读了的问题和答案,但这里也没有区分可执行文件和二进制文件;只有“

我经常看到术语“二进制”和“可执行文件”似乎可以互换地用于同一事物

描述完全相同的事物不是两个术语吗;编译过程后的可执行输出程序,我可以在终端上运行吗

加强我的假设的是,这两件事应该是一样的,这是一种常见的做法,即在应用程序的安装文件夹中提供一个
bin
文件夹(“bin”作为“二进制文件”的缩写),以存储用户能够运行的可执行文件


我已经阅读了的问题和答案,但问题和答案更侧重于Clang和NDISAM各自的环境

我也在软件工程论坛上阅读了的问题和答案,但这里也没有区分可执行文件和二进制文件;只有“二进制”一词通常可以指:

但是,在计算中,二进制是指:

  • ,由人类可读文本以外的内容组成
  • ,一种二进制文件,包含计算机要执行的机器代码
  • ,文本和数据的数字表示
[来源:

其中,在编译过程的输出程序上下文中,二进制文件被称为与可执行文件相同,以及:

binaries一词被用作一组文件,这些文件基本上是在编译机器上运行的目标代码后生成的。(对于Java/.NET,则为虚拟机/运行时)

[来源: ]

指的是同一个地方


  • 在可执行程序的上下文中,“二进制文件”和“可执行文件”之间有什么区别
  • 区别在哪里

可执行文件是可以执行的文件;您可以通过将文件本身的名称写入命令行来运行它。在Unix系统上,还必须设置文件的“可执行”标志。在Windows上,文件的扩展名必须是一组固定的可执行文件扩展名之一,包括
.exe

A只是一种二进制(即非文本)格式。二进制格式意味着由于平台特定的原因(例如,将换行符从
\n
替换为
\r\n
)不应转换文件内容

二进制文件不一定是可执行文件,例如编译成
.dll
的库。因此
表单是二进制文件,但不是可执行文件。编译成
.class
.jar
表单的Java程序不是可执行文件,但可以使用命令
Java-jar program.jar
而不是com来运行mand
/program.jar


可执行文件不一定是二进制的,例如,文本形式的Python脚本可以通过编写
#!/usr/bin/python3
并设置文件的可执行标志在Unix系统上执行。

这有助于理解术语“二进制”的上下文。它起源于采用(基于文本的)的编译器程序的源代码,并将源代码转换为二进制的可执行形式,而不是基于文本的。因此,在编译器的上下文中,“文本”和“源代码”是等价的,就像“二进制”和“可执行”一样。另一方面,解释器不区分源代码和可执行代码


随着时间的推移,使用中间表示肯定会变得更加复杂,例如Java JVM、.Net的CLI或Python字节码。

二进制文件和
可执行文件是不同的集合,有一些重叠。类似于
ls
的二进制文件是可执行文件。perl脚本也可以是可执行文件,但不是二进制文件,而mp3文件是二进制文件,但不是可执行文件。@Ctx所以,程序或脚本的输出永远是可执行文件,但不必总是二进制文件?我知道这会让你更加困惑,但也会帮助你意识到什么时候给出了一个好的答案。请看:MS-DOS换句话说,我们这些从1970年代开始编程的人都知道历史原因。从计算机的角度来看,每个文件都是二进制的。最相关的区别是文本文件和非文本(二进制)文件。文本文件包含以一些众所周知的二进制格式编码的字符…呃,现在有很多可能的编码!ASCII CP1250 UTF8 UTF16…区别在于旁观者的眼睛(因此上下文)值得注意的是,即使对于C++来说,编译器的输出也不一定是可执行的,例如,共享库可以编译成<代码> .dll >代码>或<代码>。所以文件。如果我们考虑其他语言而不是C++,那么,例如,TysScript编译器的输出是JavaScript代码,它是文本而不是“源代码”。代码。@kaya3:嗯,.DLL是可移植可执行格式(PE),所以在某种意义上它是“可执行的”。为了使事情变得复杂,
GetBinaryType(filename)
将检查文件是否为PE格式,但对于DLL它返回FALSE(0)。其中一种情况是名称与功能不匹配。