gpt4 book ai didi

c++ - 我是在为操作系统或处理器编码吗?

转载 作者:IT老高 更新时间:2023-10-28 22:26:16 27 4
gpt4 key购买 nike

据说通过使用 C/C++,人们可以编写“ native ”程序——在平台上运行。我对什么被认为是原生感到困惑 - 处理器架构或操作系统版本?

例如:

我有一个 32 位处理器和 Windows 7(32 位),我编译并生成了 .exe 文件。是否保证可以在任何 Windows 7 32 位上运行? (Win 7 32 位在 32/64 位机器上)

编辑1:我不打算在这里只使用 Windows 操作系统。我的示例也可以扩展到 Linux。例如,在运行于 32 位处理器上的 32 位 Linux 操作系统上生成可执行文件(默认为 a.out ),然后在运行于 64 位处理器上的 32 位 Linux 上运行它。

编辑2:感谢您的回复,但我也打算使用标准库和函数 - 没有特定于操作系统的内容。仅由 ANSI 或 ISO C++ 标准指定一次。不引用操作系统特定的窗口系统或其他库。谢谢

最佳答案

两者;那种。

实际指令在 Windows 和 Linux 之间并没有真正的不同,因为它们是针对单一 CPU 架构 (x86) 编译的。

但是,二进制文件不仅仅是在裸硬件上运行的代码。例如,它还包含告诉操作系统如何加载可执行文件及其依赖项的信息。二进制文件以特定格式打包。这种格式在不同的操作系统中可能会有所不同。

除此之外,操作系统还为应用程序提供一些服务(通过系统调用和 API)。操作系统提供的服务以及它们的使用方式因操作系统而异。

这些原因导致大多数时候原生二进制文件同时依赖于编译它的操作系统和 CPU 架构。


回答更新后的问题:

C++ 标准对编译目标的性质没有任何要求。它只是在源代码级别指定兼容性要求。因此,如果您坚持使用标准库,您将能够使用相同的源代码在提供符合 C++ 实现的平台上进行编译。该标准没有说明二进制可移植性。正如我上面提到的,操作系统提供的原始系统调用可能会有所不同,标准库的实际实现取决于操作系统提供这些系统调用的方式。

为了在 Linux 上运行 Windows 二进制文件,您需要使用某种模拟,例如 Wine,它可以理解 Windows 二进制格式并为应用程序模拟 Windows API。

关于c++ - 我是在为操作系统或处理器编码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4232102/

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