2014-10-21 2 views
1

FPC는 64 비트 프로세서

program Project1; 

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

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

내 시스템에 델파이 (XE) 및 FPC (2.6.2)에서 다른 출력을 다음 애플리케이션 (Win7에 64 비트, CPU 인텔 코어 CPU386 심볼을 정의하지 않는다 i3). 델파이 출력 CPU386 문자열, FPC 않습니다.

내 CPU에 대해 FPC에서 CPU386 심볼을 정의하지 않았습니다 (the list of FPC defines 참조). 대신 CPUX86_64 심볼을 정의합니다.

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

예입니다. Delphi는 기존의 FPC 정의에서 거의 10 년 전과 호환되지 않는 것으로 선택해서는 안됩니다. 더 나쁜 것은 그 당시에도 FPC를 사용하고있었습니다 (XE2). Embarcadero에 버그를 신고하십시오. –

답변

2

예상대로입니다 :

지금까지 나는 다음 해결 방법을 사용하고 있습니다. CPU386 조건부는 32 비트 Intel x86 대상입니다. CPUX86_64 조건부는 64 비트 Intel x64 대상입니다.

64 비트 Delphi 컴파일러로 프로그램을 컴파일하면 출력도 생성되지 않습니다. 왜냐하면 CPU386 조건부는 64 비트 델파이 컴파일러에 대해서도 정의되어 있지 않기 때문입니다.

은이 작업을 수행하는 것이 올바르지 않습니다

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

CPU386

대상 아키텍처는 32 비트 인텔 x86 있음을 의미합니다. 그리고 64 비트 인텔 x64는 그렇지 않습니다.

미리 정의 된 조건문에 대한 델파이 문서는 여기에 있습니다 :

  • CPUARM
  • CPU386
  • CPUX86
  • CPUX64
: http://docwiki.embarcadero.com/RADStudio/en/Conditional_compilation_(Delphi)#Predefined_Conditionals

그것은이 (가) CPU 제목 아래 다음과 같이 나열

32 비트 x86 대상의 경우 Delphi 및 FPC 모두 CPU386을 정의합니다. 64 비트 x64 대상의 경우 델파이는 CPUX64으로 정의되고 FPC는 CPUX86_64으로 정의됩니다.

공유 소스 코드에서 공통 조건을 사용해야하는 경우 약간의 추가 작업이 필요할 수 있습니다. CPUX86CPUX64에 정착한다고 가정합니다. 그런 다음이 포함됩니다 :

가장 쉬운보고 FPC의 "FPC의 -va 출력에 보는 것입니다
{$IFDEF FPC} 
    {$IFNDEF CPU386} 
    {$DEFINE CPUX86} 
    {$ENDIF} 
    {$IFNDEF CPUX86_64} 
    {$DEFINE CPUX64} 
    {$ENDIF} 
{$ENDIF} 
+0

추가 참고 사항 : 64 비트 델파이 컴파일러는 (적어도 문서에 따르면)'CPUX86_64'를 정의하지 않을 것입니다 : 대신에'CPUX64'를 사용하므로 여전히 비 호환성이 있습니다. – hvd

+0

64 비트 델파이가 없는지 확인해 주셔서 감사합니다. – kludg

+0

필자가 포함시킨 문서 링크는 모든 컴파일러가없는 사용자에게 유용하다고 생각합니다. 나는 dcc32와 dcc64만을 가지고있다. –

1

무엇 (32 비트) FPC는 i386에서 정의 할 : (2.6.0)을

[0.002] Macro defined: CPU86 
[0.002] Macro defined: CPU87 
[0.002] Macro defined: CPU386 
[0.002] Macro defined: CPUI386 
[0.002] Macro defined: CPU32 

64 비트 컴파일러는 정의 (2.7.1, 손에 릴리스 버전이 없었다) 그것은 x86_64의 아키텍처의 이름이 변경 되었기 때문에 델파이 호환 정의를 선택하지 않은 것을 유감

[0.004] Macro defined: CPUX86_64 
[0.004] Macro defined: CPUAMD64 
[0.004] Macro defined: CPU64 
[0.004] Macro defined: CPUX64 

입니다. 몇 시간, FPC 몇 가지를 정의합니다.

참고 btw 해당 CPU32 및 CPU64는 일반 32/64 비트 스위칭 용입니다.포인터 크기에만 영향을 주지만 x86과 관련이없는 모든 것에 이것을 사용하십시오. 원래 Intel과 PowerPC 사이의 추상화가 주로 있었지만, 64 비트 ARM이 중요하므로 다시 올 수 있습니다.

특정 프로세서를 대상으로하는 변경 사항에 대한 cpui386 및 cpux86_64.

이러한 정의의 설명서는 here

관련 문제