gpt4 book ai didi

architecture - 使用 Code::Blocks 编译时针对不同的 CPU - 理解错误

转载 作者:行者123 更新时间:2023-12-01 02:43:09 26 4
gpt4 key购买 nike

我正在使用 Code::Blocks 开发 C 应用程序,并且需要针对多个平台(32 位、64 位)。我的开发箱是 64 位的,所以我尝试在项目设置中检查编译器的 i386 (-march=i386) 选项。现在,当我编译时,我得到:

mainc:1: 错误:您选择的 CPU 不支持 x86-64 指令集

  • 我不明白这个消息!通过指定 i386 不应该只是生成 x86 指令(不是 -64)?另外,我的CPU是X86-64,为什么说我的CPU不支持呢?
  • 我这样做是错误的吗?是否有针对不同架构的正确方法?
  • 最佳答案

    您必须在这里区分几件事:

  • 有 32 位和 64 位“平台”在同一处理器上运行。相同的 X86-64 处理器可以在 x86 或 AMD64 模式下运行。这决定了可用寄存器的数量、它们的大小、堆栈布局、不同的调用约定和一些不同的操作码(还要注意,在许多操作系统上,32 位代码将在 64 位操作系统中的某种兼容层中运行,而无需问题)
  • 这些平台中的任何一个都有编译器,并且有编译器可以生成两者之一(但不能同时生成两者)。
  • 编译器可以是与程序构建的平台不同的平台(所谓的交叉编译器,非常常见的事情,例如在为嵌入式系统开发时,但您也可以从 Linux-64 或 Windows-32 进行交叉编译或反过来,或在 Win32 计算机上为 Win64 编译)。
  • 除了平台之外,生成的代码( -march 开关)也存在特定于模型的差异。这决定了假定的处理器生成,这决定了可以在生成代码时使用哪些指令。并非平台和架构的每个组合都有效(这就是您的问题:假设 25 岁的 386 处理器意味着它不可能在 AMD64 模式下运行)。
  • 或者,您甚至可以安排与生成代码不同的内容。例如,您可以生成使用最高 Pentium III 指令的代码,但调度 Core i7。这将在几乎每个处理器上运行(次优,但它会运行),并在最新的生产线上以最佳方式运行。
  • 最后,还有许多开关,例如 -msse进一步启用/禁用指令的系列。

  • 您没有指定“Windows”或“Linux”或其他任何内容,因此很难准确回答您的问题,但假设您可能正在使用 MingW-w64。这个编译器允许你创建 32 位和 64 位代码,这取决于你告诉它做什么。显然,如果你告诉它以 64 位模式(默认!)生成代码,那么 i386 不是一个好的选择。如果你给它 -m32作为命令行选项,它将生成 32 位代码,并且可以正常工作。

    如果您确切地说出您使用的编译器,它可能有助于找到更具体的答案。 Code::Blocks 附带(可选)在 Windows 上构建的 TDM 4.5.1,例如,但使用其他操作系统下的任何内容。

    关于architecture - 使用 Code::Blocks 编译时针对不同的 CPU - 理解错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7649843/

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