Compiler construction 编译器-平台差异

Compiler construction 编译器-平台差异,compiler-construction,compilation,operating-system,Compiler Construction,Compilation,Operating System,如果编译器将特定处理器(比如intel)的源代码转换为机器代码(二进制),那么为什么我们需要一个linux编译器和一个不同的windows编译器,因为这两个操作系统都有相同的处理器?为什么编译器依赖于平台 为什么我不能在linux和widows上运行二进制编译文件(假设我在linux中使用gcc-Wall-o file file.c)而不重新编译 谢谢想象一下你有你的可执行文件。操作系统必须将其加载到内存中。即使这样也不便于携带。加载什么、代码在哪里、它将从其他DLL导入哪些函数等等都写在可执行

如果编译器将特定处理器(比如intel)的源代码转换为机器代码(二进制),那么为什么我们需要一个linux编译器和一个不同的windows编译器,因为这两个操作系统都有相同的处理器?为什么编译器依赖于平台

为什么我不能在linux和widows上运行二进制编译文件(假设我在linux中使用
gcc-Wall-o file file.c
)而不重新编译


谢谢

想象一下你有你的可执行文件。操作系统必须将其加载到内存中。即使这样也不便于携带。加载什么、代码在哪里、它将从其他DLL导入哪些函数等等都写在可执行文件中,每个操作系统都有自己的格式。请参阅以下链接:

  • (Windows PE文件格式)
  • (Linux ELF文件格式)
现在想象一下,由于魔法的作用,操作系统在内存中拥有所有的东西,映射到它的结构,它甚至知道要调用的主函数的地址。你的程序,即使在屏幕上写一个字符串,也必须调用一个函数或一个函数。对于CRT,它不知道该做什么,这两种环境中的CRT是不同的,甚至API也是不同的


即使,再想象一下(Windows实现了a),它有一个调用的公共函数,但由于不同的原因,他不知道如何调用它。

想象一下,您有一个可执行文件。操作系统必须将其加载到内存中。即使这样也不便于携带。加载什么、代码在哪里、它将从其他DLL导入哪些函数等等都写在可执行文件中,每个操作系统都有自己的格式。请参阅以下链接:

  • (Windows PE文件格式)
  • (Linux ELF文件格式)
现在想象一下,由于魔法的作用,操作系统在内存中拥有所有的东西,映射到它的结构,它甚至知道要调用的主函数的地址。你的程序,即使在屏幕上写一个字符串,也必须调用一个函数或一个函数。对于CRT,它不知道该做什么,这两种环境中的CRT是不同的,甚至API也是不同的

即使,再想象一下(Windows实现了a),它有一个调用的公共函数,但由于不同的原因,他不知道如何调用它。

请参阅:请参阅: