首页 文章

编译器是否特定于操作系统?

提问于
浏览
1

我理解编译器的作用,因为它需要源代码并将其编译为计算机可以理解的机器代码 . 但是,我想知道一件事,那就是针对每个不同操作系统的机器代码?是否有必要在Mac,Windows和Linux操作系统上为同一种语言编写不同的编译器?请详细说明答案是肯定的,否定的或中间的 .

2 回答

  • 1

    这取决于 .

    生成机器指令的编译器是机器(或体系结构)特定的:ARM和x86具有不同的指令集,因此每个机器代码都会有很大不同,但它不一定与操作系统相关(尽管通常是,因为不同操作系统具有不同的调用约定等 . )链接器组件几乎总是特定于操作系统,因为这是为该操作系统创建可执行文件的原因 . 并非所有编译器系统都将编译器与链接器分开 - 如果它是一个程序,而不是特定于操作系统的程序 .

    但是,有OS /机器独立编译器:最着名的是Java(和其他基于JVM的语言,如Scala或Groovy) . 这是因为Java编译器为JVM生成字节码,并由Java运行时(OS和处理器特定)执行 . 但是Java编译器(用Java编写)可以在任何机器上运行,并生成可在任何机器上运行的代码 .

  • 1

    编译的输出包含两件事1.调用操作系统库例程2.执行“业务逻辑”的本机代码

    对于针对特定处理器体系结构的每个编译,第二部分很可能是相同的(如果您使用相同版本的GCC,为什么不应该这样) .

    对函数库例程的调用是事情发生的地方 . 这就是WINE在Linux上存在的原因 - 它是为了给你一些在Linux上运行的“模拟”/“翻译”例程,为你提供一种在外星操作系统上运行Windows程序的方法 .

    所以答案是真的,不完全 . 而不是绝对的是或否 .

相关问题