delphi - FPC没有为64位处理器定义CPU386符号

标签 delphi fpc

下一个应用

program Project1;

{$IFDEF FPC}
  {$mode delphi}
{$ENDIF}

begin
  {$IFDEF CPU386}
    Writeln('CPU386');
  {$ENDIF}
  Readln;
end.

在我的系统(Win7 64 位,CPU intel core i3)上,Delphi(XE) 和 FPC(2.6.2) 产生不同的输出。 Delphi 输出 CPU386 字符串,FPC 则不输出。

似乎 FPC 没有为我的 CPU 定义 CPU386 符号(请参阅 the list of FPC defines );它定义了 CPUX86_64 符号。

到目前为止,我正在使用下一个解决方法:

{$IFDEF FPC}
  {$IFNDEF CPU386}
    {$IFDEF CPUX86_64}
      {$DEFINE CPU386}
    {$ENDIF}
  {$ENDIF}
{$ENDIF}

最佳答案

这正如预期的那样。 CPU386 条件适用于 32 位 Intel x86 目标。 CPUX86_64 条件适用于 64 位 Intel x64 目标。

当您使用 64 位 Delphi 编译器编译程序时,它也不会产生任何输出。因为 CPU386 条件也没有为 64 位 Delphi 编译器定义。

这样做是不正确的:

{$IFDEF CPUX86_64}
  {$DEFINE CPU386}
{$ENDIF}

CPU386 表示目标架构是 32 位 Intel x86。而 64 位 Intel x64 则不是。

预定义条件的 Delphi 文档位于:http://docwiki.embarcadero.com/RADStudio/en/Conditional_compilation_(Delphi)#Predefined_Conditionals

它在 CPU 标题下列出了以下内容:

  • CPUARM
  • CPU386
  • CPUX86
  • CPUX64

对于 32 位 x86 目标,Delphi 和 FPC 都定义了 CPU386。对于 64 位 x64 目标,Delphi 定义了 CPUX64,FPC 定义了 CPUX86_64

如果您需要在共享源代码中使用通用条件,那么您可能需要做一些额外的工作。假设您选择了 CPUX86CPUX64。然后你会包括这个:

{$IFDEF FPC}
  {$IFNDEF CPU386}
    {$DEFINE CPUX86}
  {$ENDIF}
  {$IFNDEF CPUX86_64}
    {$DEFINE CPUX64}
  {$ENDIF}
{$ENDIF}

关于delphi - FPC没有为64位处理器定义CPU386符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26481400/

相关文章:

c++ - 在 Delphi 中从 c++ DLL 调用函数

delphi - 禁止RemObjects SOAP错误“未预期内容类型”

Delphi 泛型 > 具有默认值的字典

delphi - delphi2010 中的错误行为/Bug "extract method"

pointers - 如果在 P 设置为 nil 后将 C 类的字段 F 分配给指针 P,在 FreePascal 中会发生什么?

delphi - 如何在 delphi TFrame 上编写调整大小句柄?

makefile - fpcmake 和 Makefile.fpc,我可以在哪里获得培训?

set - Pascal中使用的集合的实现是什么?

android - 如何让Lazarus编译到Android?

delphi - FreePascal RTTI。有没有办法调用方法?