Gcc赢得';t识别带有'的Ada;d单元

Gcc赢得';t识别带有'的Ada;d单元,ada,Ada,我试图编译一个Ada单元,它的规范声明为三级包名,比如包A.B.C,但编译失败,抱怨没有单元A.B 也就是说,它似乎只搜索名为A-B.ads的文件,而不搜索A-B-C.ads。 如何让gcc查找正确的文件? 感谢您的帮助。与A.B.C表示与A和A.B以及A.B.C的。 所以它确实在寻找正确的文件,但它也需要另外两个。 确保搜索路径中的所有依赖项都可用 另外,确保文件名是小写的(a.ads,a-b.ads,a-b-c.ads),这是GNAT/gcc所期望的。点运算符对Ada包之间的关系有特殊意义与

我试图编译一个Ada单元,它的规范声明为三级包名,比如包A.B.C,但编译失败,抱怨没有单元A.B 也就是说,它似乎只搜索名为A-B.ads的文件,而不搜索A-B-C.ads。 如何让gcc查找正确的文件?
感谢您的帮助。

与A.B.C
表示
A
A.B
以及
A.B.C
。
所以它确实在寻找正确的文件,但它也需要另外两个。
确保搜索路径中的所有依赖项都可用


另外,确保文件名是小写的(
a.ads
a-b.ads
a-b-c.ads
),这是GNAT/gcc所期望的。

点运算符对Ada包之间的关系有特殊意义<代码>与A.B.C一起
表示包C是包B的子包,B是包A的子包。这意味着如果没有父包,也不能使用子包。换句话说,要允许子包上的
with
语句,必须存在父包,尽管它可以为空。因此,您需要创建包A和包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;

请注意,如果规范没有过程,则不允许添加包体。还请注意,使用A.B.C
是否意味着使用A
和使用A.B
取决于运行时系统的配置。

如果添加
pragma\u body,则可以使用其他禁止的包体(或相应的)符合规范。而且,我认为RTS配置与是否使用Ada.Strings.Unbounded
无关
表示
Ada.Strings
可见(它是)。