【发布时间】:2021-04-23 17:41:11
【问题描述】:
我想我在 x86-64/i686 架构和 32 位/64 位操作系统之间感到困惑。
如果我在 32 位操作系统(例如 Ubuntu 14.04)上使用 g++ 构建应用程序,那么 -m64 不是有效选项,我无法构建 64 位二进制文件。但是,g++ 并没有抱怨使用-march=x86-64。 (硬件是 Core i7。)
然后,如果我在 64 位操作系统(例如 Ubuntu 20.04)上构建,我可以在 -m32 和 -m64 之间切换并构建 32 位或 64 位二进制文件。
所以,我的理解是……
-m32 和-m64 规定了我可以在哪些操作系统上使用二进制文件。 (包括在 64 位操作系统上使用的 32 位二进制文件和适当的库)
而-march 定义了将用于代码生成的指令集——不管它注定要在什么操作系统上运行。
所以我的主要问题是......
鉴于我可以使用 -m32 -march=x86-64 在 32 位操作系统上构建和运行二进制文件,这是否意味着 x86-64 指令可以在 32 位操作系统上使用?
【问题讨论】:
标签: gcc g++ x86-64 32bit-64bit