windows和linux生成的可执行文件之间有什么区别

Sha*_*dra 2 c linux compiler-construction

可能重复:
为什么特定CPU的可执行程序在Linux和Windows上不起作用?

为什么用linux编写的程序不能在windows中执行?假设我编译了一个简单的C程序,其中包含对windows和linux都通用的函数调用,编译器是否在windows和linux下生成不同的二进制文件?

SLa*_*aks 6

他们使用不同的容器格式.

大多数Linux可执行文件都是ELF文件; 所有Windows可执行文件和DLL都是PE文件.

  • 回到当天,Windows 支持`COM` 可执行文件,它基本上只是原始程序集 - 没有任何标题。有谁知道它是否仍然如此? (2认同)

Has*_*yed 5

以下是我能想到的一些原因:

  1. 不同的容器格式(到目前为止似乎是这个答案的主要区别 - 但它不是唯一的原因).
  2. 不同的动态链接器语义.
  3. 不同的ABI.
  4. 不同的异常处理机制 - 窗口有SEH - 构建C++异常处理
  5. 不同的系统调用语义和不同的系统调用 - 因此不同的低级库.