【发布时间】:2017-11-05 11:53:48
【问题描述】:
假设我想为一个平台编译一个 C 程序。我知道由于不同CPU架构之间指令集的差异,我必须在编译时指定CPU架构。我也知道,由于可执行文件结构和系统调用的差异以及...不同操作系统之间的差异,我必须指定目标平台操作系统。
Q1:问题是如果我也需要指定32bit或64bit的OS(不是CPU架构)?
换句话说,假设我有两个系统:
- 64 位 CPU + 32 位微软视窗
- 64 位 CPU + 64 位微软视窗
上述系统编译程序有什么不同吗?
Q2:当我在gcc编译器的选项中添加-m32时,这个32是干什么用的?是操作系统还是CPU架构?
【问题讨论】:
-
它还取决于您链接到的共享库以及编译时头文件定义的系统类型的结构。此外,编译器优化定义了 CPU 提供的最小功能集。 -m 只是目标架构的一个子集,如下所述:gcc.gnu.org/ml/gcc-help/2009-10/msg00280.html - 我会说不要使用它。
-
为什么说我不用呢?即使我有 32 位 CPU 架构?
-
是的,不要直接使用,使用 -march=i386 代替。并考虑不进行交叉编译,这样更难获得正确的环境。
-
您已经接受了答案,所以我认为它有所帮助。
-
我不是 GCC for Windows 方面的专家,但通常您必须使用为预期目标生成的 GCC。您将使用正确的编译器选择目标。据此,mingw 至少有一个多目标版本:stackoverflow.com/questions/19690504/… 你没有说你使用什么编译器。
标签: gcc compilation operating-system 32bit-64bit cpu-architecture