【问题标题】:compiler - platform differences编译器 - 平台差异
【发布时间】:2012-03-21 21:35:31
【问题描述】:

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

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

谢谢

【问题讨论】:

标签: compiler-construction compilation operating-system


【解决方案1】:

假设你有你的可执行文件。操作系统必须将其加载到内存中。即使这也不是便携式的。要加载的内容、代码的位置、将从其他 DLL 导入的函数等等都写在可执行文件中,每个操作系统都有自己的格式。请参阅以下链接:

现在想象一下,由于魔法,操作系统将所有内容都保存在内存中,映射到其结构,甚至知道要调用的主函数的地址。你的程序,即使是在屏幕上写一个字符串也必须调用CRT 函数或OS API。使用 CRT 不知道该怎么做,它们在两个环境中是不同的,甚至 API 也不同。

即使再想象一下(Windows 实现了一个subset of POSIX API),它有一个通用的函数可以调用他不知道如何调用它,因为calling conventions 不同。

【讨论】:

    猜你喜欢
    • 2014-09-01
    • 2015-03-10
    • 1970-01-01
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    • 2011-08-24
    • 1970-01-01
    • 2015-09-04
    相关资源
    最近更新 更多