Language agnostic “之间的区别在哪里?”;“二进制文件”;及;“可执行文件”;在可执行程序的上下文中?
我经常看到术语“二进制”和“可执行文件”似乎可以互换地用于同一事物 描述完全相同的事物不是两个术语吗;编译过程后的可执行输出程序,我可以在终端上运行吗 加强我的假设的是,这两件事应该是一样的,这是一种常见的做法,即在应用程序的安装文件夹中提供一个Language agnostic “之间的区别在哪里?”;“二进制文件”;及;“可执行文件”;在可执行程序的上下文中?,language-agnostic,executable,binaryfiles,terminology,Language Agnostic,Executable,Binaryfiles,Terminology,我经常看到术语“二进制”和“可执行文件”似乎可以互换地用于同一事物 描述完全相同的事物不是两个术语吗;编译过程后的可执行输出程序,我可以在终端上运行吗 加强我的假设的是,这两件事应该是一样的,这是一种常见的做法,即在应用程序的安装文件夹中提供一个bin文件夹(“bin”作为“二进制文件”的缩写),以存储用户能够运行的可执行文件 我已经阅读了的问题和答案,但问题和答案更侧重于Clang和NDISAM各自的环境 我也在软件工程论坛上阅读了的问题和答案,但这里也没有区分可执行文件和二进制文件;只有“
bin
文件夹(“bin”作为“二进制文件”的缩写),以存储用户能够运行的可执行文件
我已经阅读了的问题和答案,但问题和答案更侧重于Clang和NDISAM各自的环境 我也在软件工程论坛上阅读了的问题和答案,但这里也没有区分可执行文件和二进制文件;只有“二进制”一词通常可以指: 但是,在计算中,二进制是指:
- ,由人类可读文本以外的内容组成
- ,一种二进制文件,包含计算机要执行的机器代码
- ,文本和数据的数字表示
- 在可执行程序的上下文中,“二进制文件”和“可执行文件”之间有什么区别
- 区别在哪里
.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)。其中一种情况是名称与功能不匹配。