c++ 模块文件是独立于平台还是跨平台的?

Are c++ module files platform independent / cross platform?

提问人:Troy Hamilton 提问时间:7/28/2023 最后编辑:Troy Hamilton 更新时间:7/28/2023 访问量:104

问:

我有一个大的 .cpp 文件,需要几分钟才能编译,我想与朋友分享,他们有一台手臂机器,我有一台 x86 机器。我可以在我的机器上将其作为 c++ 模块并通过电子邮件发送给我的朋友,以便他们可以使用该模块而无需编译大型 .cpp 文件吗?我们都运行相同类型的操作系统,并且使用来自同一供应商的编译器(如果重要的话)。

C++ 头文件 std 20 C+ +-模块

评论

0赞 BoP 7/28/2023
不,不是马上。您可以安装 ARM 交叉编译器并使用它来编译代码。但是,如果使用 x86 编译器,则文件将无法在非 x86 系统上运行。
0赞 chris 7/28/2023
我在这里看到编译模块与最终的二进制形式有些混淆。编译模块应是 AST 的二进制表示形式。问题是问是否可以共享它,而不是最终的二进制文件。
0赞 HolyBlackCat 7/28/2023
“相同类型的操作系统”,但架构不同?

答:

-2赞 Akash Kumar 7/28/2023 #1

使用模块编写的代码应可跨支持 C++20 标准的不同平台和编译器移植。但是,这里的关键是您和您的朋友正在使用的特定编译器对 C++20 模块的支持。

2赞 Nicol Bolas 7/28/2023 #2

这些都不是由标准指定的,因此对于不同的编译器和平台会有所不同。但通常,模块编译的输出产品是对象文件(库,所以肯定是特定于 CPU 的)和模块文件。后者至少是特定于编译器的(甚至可能对编译版本敏感),并且很可能是特定于 CPU 或操作系统的(特别是如果您有任何特定于 CPU 的版本)。#ifdef

只需将您的源文件交给他们并让他们自己构建一次模块会更具可移植性。