gpt4 book ai didi

compiler-construction - 了解不同平台对编译器的需求

转载 作者:行者123 更新时间:2023-12-04 08:39:49 25 4
gpt4 key购买 nike

我正在尝试了解整个构建链是如何工作的,以便我可以更好地了解在构建/链接/编译等时发生了什么。

我遇到的一个问题是:如果编译器将源代码转换为本地程序集,为什么同一个程序不能在不同的操作系统上运行?汇编不是直接由 CPU 运行的吗?所以相同的机器代码应该在每个操作系统上运行,只要它是相同的架构,不是吗?为什么不?

编辑:到目前为止,大多数答案都是关于调用操作系统的 API。这显然是一个问题。我的问题是关于 直机码 .它是否直接传递给CPU?如果我用汇编写了一个程序,我还需要为每个操作系统单独编译吗? (旁注:如果我使用标准的 c++ cin/cout,是否依赖于操作系统,被编译为直接汇编 I/O,或者答案是否取决于编译器?)

最佳答案

不同的操作系统支持不同的二进制格式(例如 ELF 与 COFF)、不同的动态链接器(在分发二进制文件后,在运行时链接 *.so、*.dll 和 *.dylib 文件),并提供不同的集合使用操作系统提供的功能的函数和库。

例如,可以通过 Single UNIX Specification/IEEE Std 处理不同的函数集。 1003.1 (POSIX),它规定在所有操作系统上为各种操作系统任务提供一组单一的功能(不幸的是,并非所有操作系统——嗯,Windows——都符合)。关于二进制格式(以及 CPU 指令集架构),处理这个问题的一种方法是分发一些更高级别的二进制格式(字节码),然后对目标指令集和二进制格式(虽然这更多的是关于在你做的时候改变......它仍然需要完成)。例如,低级虚拟机 (LLVM) 提供了这种转换。

关于compiler-construction - 了解不同平台对编译器的需求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4142088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com