【发布时间】:2017-04-30 10:54:56
【问题描述】:
假设,我有一个用 C 语言编写的程序,我有两台相同的计算机,一台运行 Windows,另一台运行 linux。由于计算机是相同的,它们的处理器具有相同的指令集,因此编译后的机器代码应该是相同的。那么为什么我需要编译我的程序两次呢?假设,我不调用任何与操作系统相关的函数,或者依赖于实际操作系统的函数。
【问题讨论】:
-
可执行格式不同。
-
你无法避免调用操作系统函数或调用操作系统函数的东西。如果您希望您的程序具有可见的效果,例如打印一个数字,则不是。
-
为什么它们不同?它与保护模式/内核模式有关吗?如果处理器相同,它们不应该运行相同的机器代码吗?
-
它们运行相同的机器代码,但操作系统的接口不同。
-
即使您不调用“操作系统特定函数”,编译器也会这样做。至少在程序结束时“返回操作系统”会完成
标签: c assembly compilation linker machine-code