2017-09-25 3 views
1

Calculator.ada 파일을 gcc -c Calculator.ada을 사용하여 컴파일하려고하는데 오류가 발생했습니다. warning: Calculator.ada: linker input file unused because linking not done - 해결책을 찾고 해결책을 찾지 못했지만이를 컴파일 할 수는 있지만 생각지 못했습니다. 아직 밖으로 ....Ada - GCC를 사용하여 Ada 컴파일

여기 Calculator.ada입니다 :

-- 
-- Integer calculator program. Takes lines of input consisting of 
-- <operator> <number>, and applies each one to a display value. The 
-- display value is printed at each step. The operator is one of =, 
-- +, -, *, /, or ^, which correspond to assign, add, subtract, multiply 
-- divide, and raise, respectively. The display value is initially zero. 
-- The program terminates on a input of q. 
-- 
with Text_IO; 
with Gnat.Io; use Gnat.Io; 
procedure Calc is 
    Op: Character;    -- Operation to perform. 
    Disp: Integer := 0;   -- Contents of the display. 
    In_Val: Integer;    -- Input value used to update the display. 
begin 
    loop 
     -- Print the display. 
     Put(Disp); 
     New_Line; 

     -- Promt the user. 
     Put("> "); 

     -- Skip leading blanks and read the operation. 
     loop 
     Get(Op); 
     exit when Op /= ' '; 
     end loop; 

     -- Stop when we're s'posed to. 
     exit when Op = 'Q' or Op = 'q'; 

     -- Read the integer value (skips leading blanks) and discard the 
     -- remainder of the line. 
     Get(In_Val); 
     Text_IO.Skip_Line; 

     -- Apply the correct operation. 
     case Op is 
     when '='  => Disp := In_Val; 
     when '+'  => Disp := Disp + In_Val; 
     when '-'  => Disp := Disp - In_Val; 
     when '*'  => Disp := Disp * In_Val; 
     when '/'  => Disp := Disp/In_Val; 
     when '^'  => Disp := Disp ** In_Val; 
     when '0'..'9' => Put_Line("Please specify an operation."); 
     when others => Put_Line("What is " & Op & "?"); 
     end case; 
    end loop; 
end Calc; 

은 내가이 컴파일 할 수없는 이유에 어떤 도움을 부탁드립니다. 나는 gcc -c으로 C 파일을 잘 컴파일 할 수 있었고 Ada와 같은 방법으로 컴파일 할 수 있다는 것을 읽었다.

+0

컴파일되지 않았거나 @EugeneSh가 누락되었습니다. ? 나는 .asa 만 가지고 있고 거기에는/o. – NikkiNelson

+1

[this] (https://gcc.gnu.org/onlinedocs/gnat_ugn/Running-a-Simple-Ada-Program.html)에서 ADA 프로그램의 확장자는'adb' 또는'ads'이어야합니다. 'gcc'는 ADA 프로그램이라고 이해하지 못할 수도 있습니다 ... –

+1

"gnat --version"... "명령을 찾을 수 없습니다"라는 메시지가 나타나면 gcc 설치가 불완전해질 수 있습니다. (일반적으로 "gnat- "이라는 패키지를 찾아서 설치하십시오. "gnatmake Calculator.adb"(파일의 이름을 바꿉니다!)를 컴파일하고 링크해야합니다. –

답변

2

기본적으로 Ada 소스 파일은 .ads (패키지 사양의 경우) 또는 .adb (본문의 경우)로 끝나야하며 파일 이름은 포함하는 최상위 엔티티와 일치해야합니다. 귀하의 경우에는 calc.adb을 사용해야합니다.

여러 엔티티가 포함 된 더 복잡한 소스 파일이있는 경우 gnatchop tool to rename source files을 사용할 수 있습니다.

File Naming Topics and Utilities 아래에는 설명서에 파일 시스템에서 소스 코드를 표시하는 방법에 대한 문서가 많이 포함되어 있습니다.

+0

나는 그것에 대해 읽었고, 제 파일을 정확하게 변경했습니다 :'Calc.adb' 그리고 'gcc : error : CreateProcess : 그런 파일이나 디렉토리가 없다 ' – NikkiNelson

+0

gcc에 ADA가 지원되지 않을 수 있습니까? 명백하지 않습니다. . –

+1

'calc.adb' (소문자)입니다. 'CreateProcess' 오류입니다. 꽤 이상합니다. FSF GCC가 인쇄하는 것이 아닙니다. AdaCore 배포판을 사용하고 있습니까? –

3

(유진에 의해 언급 this link에서 설명) GCC는 에이다 소스 파일 끝으로 .ads.adb을 인식하기 때문에, 당신은이 파일이 에이다 소스로 컴파일 할 것을 명시 적으로 말할 필요가있다. 당신은 아마

Calculator.ada:11:11: warning: file name does not match unit name, should be "calc.adb" 

같은 경고를 줄 것이다

gcc -x ada -c Calculator.ada 

컴파일러를 통해이 작업을 수행 할 수 있지만 당신은 무시할 수 있습니다. 그러나 gcc가 예상하는 파일 이름을 사용하는 것이 가장 좋습니다.

+0

지금 'no such file' 존재 오류가 발생했습니다. – NikkiNelson

+0

전체 코드가 표시되지 않습니다.표준이 아닌'Text_IO' 패키지를 임포트합니다 (오직'Ada.Text_IO' 패키지 만 있습니다). 오류는 해당 패키지의 인터페이스에있을 수 있으며 코드를 표시해야합니다. – flyx