在 Windows 中,当我编译一个简单的“C”程序时,我得到了最终的可执行机器代码 .exe
。
同样的事情在 unix 中使用 gcc 会产生一个 .out
机器代码文件。
它们之间有什么区别?
我的基本问题是,.exe
和 .out
是机器代码,为什么它们依赖于操作系统?
例如,在Unix中我不能直接执行.exe
,在Windows中,我不能执行Unix的.out
。为什么会这样?
最佳答案
这都与程序的加载方式有关。
Windows 和 Linux 对于它们希望程序如何定义自身有不同的格式。
在 Linux 中,ELF通常使用格式。对于 Windows,它是 PE .
这些格式定义了执行机器指令所需的有关程序的不同数据。
另外,操作系统接口(interface)不同,需要使用不同的库,需要进行不同的系统调用。
对于一个简单的程序,您通常只需在其他操作系统上重新编译即可在两个操作系统上运行,但您将无法在两个操作系统上使用一个文件。
关于c - 为什么机器代码操作系统中的可执行文件依赖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5096778/