2017-05-08 2 views
2

Ich versuche, eine Ada-Einheit zu kompilieren, deren Spezifikationen mit drei Level-Paketnamen wie Paket ABC deklariert sind, aber die Kompilierung schlägt fehl, dass es keine Einheit gibt AB Das ist es scheint nur nach Dateien mit dem Namen AB.ads und nicht nach ABC.ads zu suchen. Wie bekomme ich gcc, um nach der richtigen Datei zu suchen? Danke für jede Hilfe.Gcc erkennt keine Ada mit Einheit

Antwort

5

with A.B.C; bedeutet with sowohl A und A.B, als auch A.B.C. Es sucht also nach der richtigen Datei, aber es braucht auch die anderen beiden. Stellen Sie sicher, dass alle Abhängigkeiten in Ihren Suchpfaden verfügbar sind.

Stellen Sie außerdem sicher, dass Ihre Dateinamen klein geschrieben sind (a.ads, a-b.ads, a-b-c.ads), da dies von GNAT/gcc erwartet wird.

1

Der Punktoperator hat eine besondere Bedeutung einer Beziehung zwischen Ada-Paketen. with A.B.C bedeutet, dass Paket C ein Kind von Paket B ist und B ein Kind von Paket A ist. Dies bedeutet, dass, wenn kein Elternpaket vorhanden ist, das Kindpaket auch nicht verwendet werden kann. Mit anderen Worten, um die Anweisung with für ein untergeordnetes Paket zuzulassen, muss ein übergeordnetes Paket vorhanden sein, das leer sein kann. So müssen Sie Pakete A ein B wie wie folgt erstellen:

-- Spec 
package A is 
    -- Empty spec 
end A; 

-- Spec 
package A.B is 
    -- Empty spec 
end B; 

-- Spec 
package A.B.C is 
-- Definitions of package C 
end C; 

Beachten Sie, dass, wenn ein spec Verfahren nicht hat, ist es kein Paket Körper hinzufügen. Beachten Sie auch, dass die Angabe with A.B.Cwith A und with A.B von der Konfiguration des Laufzeitsystems abhängig ist.

+0

Sie können einen ansonsten verbotenen Paketkörper haben, wenn Sie 'pragma Elaborate_Body;' (oder den entsprechenden [aspect] (http://www.ada-auth.org/standards/rm12_w_tc1/html/RM-K-) hinzufügen. 1.html # p22)) zur Spezifikation. Und ich glaube nicht, dass die RTS-Konfiguration irgendetwas damit zu tun hat, ob 'mit Ada.Strings.Unbounded;' impliziert, dass 'Ada.Strings' sichtbar ist (ist). –