c - 为什么机器代码操作系统中的可执行文件依赖?

标签 c operating-system

在 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/

相关文章:

multithreading - 线程之间共享哪些资源?

c++ - C++中的System()调用及其在编程中的作用

javascript - 如何使用 JavaScript 检测我的浏览器版本和操作系统?

c - 我如何获得C中变量的最低有效字节

c - 对多种类型使用 qsort()

c - (C) 允许输入无限个数字,反转输入数字的顺序,输入 0 时结束程序

operating-system - 无效的页表条目是什么意思?

c - 在 xv6 中一个进程可以获得(分配)多大(多少内存)?

c - 我该如何将这些方程转换为 C 代码?

c - 在指向指针链的指针末尾初始化值