2017-05-08 19 views
2

我試圖編譯三個級封裝的名字,如包ABC宣佈withs規格的阿達單位,但編譯失敗抱怨是沒有單位AB 這就是它似乎只搜索名爲AB.ads的文件而不搜索ABC.ads。 如何讓gcc查找正確的文件? 感謝您的幫助。GCC將無法識別阿達with'd單元

回答

5

with A.B.C;意味着AA.B以及A.B.Cwith。 所以它會查找正確的文件,但它也需要其他兩個文件。 確保您的搜索路徑中存在所有依賴關係。

此外,請確保您的文件名是小寫字母(a.ads,a-b.ads,a-b-c.ads),因爲這正是GNAT/gcc所期望的。

1

點運算符具有Ada包之間關係的特殊含義。 with A.B.C表示包C是包B的孩子,B是包A的孩子。這意味着如果沒有父包,子包也不能被使用。換句話說,要允許子包上的with語句,必須存在父包,儘管它可以爲空。因此,你需要在創建包的b類似如下:

-- 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.C意味着with Awith A.B取決於運行系統的配置。

+0

如果添加'編譯Elaborate_Body可以具有否則禁封裝主體;'(或相應的[方面](http://www.ada-auth.org/standards/rm12_w_tc1/html/RM-K- 1.html#p22))。而且,我不相信RTS配置與'Ada.Strings.Unbounded'是否有關係'意味着'Ada.Strings'是可見的(它是)。 –