编译器 - 平台差异

问题描述 投票:0回答:1

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

为什么我无法在 Linux 和 Windows 上运行二进制编译文件(假设我已经在 Linux 中使用

gcc -Wall -o file file.c
编译了该文件)而无需重新编译?

compilation operating-system
1个回答
1
投票

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

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

即使再想象一下(Windows 实现了 POSIX API 的子集),它有一个通用函数可以调用,但由于不同的调用约定,他不知道如何调用它。

© www.soinside.com 2019 - 2024. All rights reserved.