2017-09-25 7 views
1

Je suis en train de compiler ce fichier Calculator.ada en utilisant gcc -c Calculator.ada et de recevoir l'erreur warning: Calculator.ada: linker input file unused because linking not done - J'ai essayé de trouver des solutions et de télécharger d'autres choses qui peuvent compiler cela pour moi mais je ne l'ai pas compris out encore ....Ada - Compilation Ada avec GCC

Voici 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; 

Je vous serais reconnaissant toute l'aide à laquelle je ne peux pas compiler cela. Je suis capable de compiler des fichiers C très bien avec gcc -c et lire que je peux compiler de la même manière pour Ada.

+0

Il n'a pas compilé si, ou est-ce que je manque quelque chose @EugeneSh. ? Je n'ai que le .ada, ne devrait pas là/qui a produit un .o? – NikkiNelson

+1

Étant donné [this] (https://gcc.gnu.org/onlinedocs/gnat_ugn/Running-a-Simple-Ada-Program.html), le programme ADA devrait avoir une extension 'adb' ou' ads'. Il pourrait être le cas 'gcc' ne comprend tout simplement pas qu'il s'agit d'un programme ADA ... –

+1

Tapez" gnat --version "... si vous obtenez" commande introuvable "votre installation de gcc est incomplète, vous aurez pour trouver et installer les parties Ada de lui (généralement un paquet appelé "gnat- ." Alors "gnatmake Calculator.adb" (renommer le fichier!) devrait compiler et lier (et toutes ses dépendances) –

Répondre

2

Par défaut, le fichier source Ada doit se terminer par .ads (pour les spécifications du package) ou .adb (pour les corps) et les noms de fichiers doivent correspondre à l'entité de niveau supérieur qu'ils contiennent. Dans votre cas, vous devez utiliser calc.adb.

Si vous avez des fichiers source plus complexes contenant plusieurs entités, vous pouvez utiliser le gnatchop tool to rename source files.

Sous File Naming Topics and Utilities, le manuel contient beaucoup plus de documentation sur la façon dont le code source peut être représenté dans le système de fichiers.

+0

J'ai lu à ce sujet, et j'ai changé mon fichier à exactement cela:' Calc.adb' et essayé de compiler de la même manière - J'ai maintenant/alors reçu l'erreur: 'gcc: erreur: CreateProcess: No tel fichier ou répertoire' – NikkiNelson

+0

Pourrait-il être votre' gcc' n'a pas le support ADA? Il n'est pas évident qu'il a –

+1

C'est 'calc.adb' (minuscule). Erreur 'CreateProcess', c'est assez bizarre. Ce n'est pas quelque chose que FSF GCC imprimerait. Utilisez-vous la distribution AdaCore? –

3

Depuis gcc ne reconnaît que .ads et .adb que les terminaisons de fichiers pour les sources Ada (comme expliqué dans this link mentionné par Eugene), vous devez dire explicitement que vous voulez que ce fichier soit compilé en tant que source Ada. Vous pouvez le faire via

gcc -x ada -c Calculator.ada 

Le compilateur donnera alors probablement un avertissement comme

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

mais vous pouvez ignorer. Cependant, la meilleure pratique serait d'utiliser les noms de fichiers attendus par gcc.

+0

Je reçois le 'no tel fichier 'existe erreur pour cela maintenant – NikkiNelson

+0

Eh bien, vous ne montrez pas votre code complet.Vous importez un paquet 'Text_IO' qui n'est pas standard (il n'y a qu'un paquet' Ada.Text_IO'). L'erreur peut très bien être dans l'interface de ce paquet et vous devez montrer son code. – flyx