2017-05-08 9 views
2

パッケージABCのような3つのレベルのパッケージ名で宣言されたwitha仕様のユニットをコンパイルしようとしていますが、ユニットが存在しないという文句を言い渡しません。AB それですAB.adsという名前のファイルを検索するだけで、ABC.adsは検索できないようです。 gccに正しいファイルを探す方法を教えてください。何か助けてくれてありがとう。 GCCはAda付きのユニットを認識しません

答えて

5

with A.B.C;は、AA.Bの両方を意味し、A.B.Cを意味する。 正しいファイルを検索しますが、他の2つのファイルも必要です。 検索パスにすべての依存関係が存在することを確認してください。

また、ファイル名がGNAT/gccの期待どおりのファイル名(小文字の場合はa.adsa-b.adsa-b-c.ads)であることを確認してください。

1

dot演算子は、Adaパッケージ間の関係の特別な意味を持ちます。 with A.B.Cは、パッケージCがパッケージBの子であり、BがパッケージAの子であることを意味します。これは、親パッケージがない場合、子パッケージも使用できないことを意味します。つまり、子パッケージ上のwithステートメントを許可するには、親パッケージが存在する必要がありますが、空でもかまいません。したがって、あなたはB以下のようにのようにAパッケージを作成する必要があります。仕様は手順を持っていない場合、パッケージ本体を追加することは許されないことを

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

注意を。また、with A.B.Cwith Aおよびwith A.Bを含意するかどうかは、ランタイムシステムの構成によって異なります。

+0

'pragma Elaborate_Body;'(または対応する[aspect](http://www.ada-auth.org/standards/rm12_w_tc1/html/RM-K-)を追加すると、他に禁止されているパッケージ本体を持つことができます。 1.html#p22))を指定します。そして、私はRTS設定が 'Ada.Strings.Unbounded;で' 'Ada.Strings'が可視であることを意味するかどうかとは何の関係もないと信じています。 –

関連する問題