首页 文章

编译器 - 平台差异

提问于
浏览
1

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

为什么't i run the binary compiled file (let'在没有重新编译的情况下可以在linux和widows上用 gcc -Wall -o file file.c 编译linux中的文件?

谢谢

1 回答

  • 1

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

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

    即使再次想象(Windows实现了subset of POSIX API),它也有一个共同的功能,因为不同的calling conventions,它不知道如何调用它 .

相关问题