GNAT编程套件:交叉引用信息不是最新的(这是猜测)

时间:2013-02-13 21:03:17

标签: ada gnat

我正在尝试使用GNAT Programming Suite(在Win XP上托管)在构建期间解析包引用。在Builder Results中,我收到类似这样的错误:

file "ac_configuration_s.ada" not found

点击错误会将我带到这样的一行:

with

    Ac_Configuration,
    Dispense_Timer,
    ...

第一项(Ac_Configuration)未解析,但第二项(Dispense_Time)已解决。我有其他几个做或不解决。所有相关文件(规范和正文)都被标识为源文件。

当我将鼠标悬停在有错误的行上时,会出现一个弹出窗口提供:

(Cross-references info not up to date. This is a guess.)
Ac_Configuration
local package declared at D_Ac_Config_S.Ada:85

猜测是正确的,但我不知道如何使用它。如何才能正确构建?

更新

这是打电话给gcc

gcc -c "-gnatec=C:\Source\build\GNAT-TEMP-000001.TMP" -I- -gnatA
-x ada "-gnatem=C:\Source\build\GNAT-TEMP-000002.TMP" "C:\Source\C_Cbt_Main_B.Ada"

我没有看到对“miimal”开关的引用。

在这种情况下,没有相应的正文文件 D_Ac_Config_S.Ada 。所以没有单独编译的正文文件。

当我右键单击 with 中的包引用时,我可以转到 Ac_Configuration 的声明以及作为错误来源的所有其他包名称。所以这些引用正以某种方式得到解决。

顺便说一句,我之前没有使用过ADA,所以我仍然想要了解一切。

2 个答案:

答案 0 :(得分:2)

看起来好像你使用_s.ada作为规范的后缀,而我猜测_b.ada是否有身体?

GNAT可能难以使用此命名约定。使用GNAT Project文件(.gpr)可以使用alter GNAT's default convention{unit-name}.ads用于规范,{unit-name}.adb用于实体),但规则(请参阅“Spec_Suffix”) )说“它不能以下划线后面跟一个字母数字字符开头”(我没试过这个,但你可以看到,如果你有一个包Foo_S,它会混淆问题)。
后来:事实证明GNAT(GPL,4.7,4.8)对你的后缀非常满意!

如果包Ac_Configuration实际上是D_Ac_Config_S.Ada第85行声明的本地包,那么就是你的问题;你只能with一个图书馆单位,在这种情况下是D_Ac_Config

with D_Ac_Config;
...
package Foo is
   ...
   Bar : D_Ac_Config.Ac_Configuration.Baz;

我想知道D_Ac_Config_S.Ada(例如)是否实际上包含多个Ada单位? (如果是这样,编译该文件应该导致编译错误,例如end of file expected, file can have only one compilation unit)。 GNAT在编译时不支持此功能,而是提供实用程序gnatchop

是否可以只使用gnatchop所有来源并完成它?

答案 1 :(得分:0)

嗯,我认为这听起来好像编译器有一组糟糕的对象/ ALI正在使用,因此交叉引用不是最新的错误。 (通常编译器最好保持最新;但您可能需要检查是否为项目设置了“最小重新编译”开关。)

您是否尝试过编译[“拥有”]文件D_Ac_Config_S.Ada? (即如果它是一个规范,请转到相应的主体并编译它。)这应该强制更新其ALI /目标文件。

然后尝试正常建设。

- PS:您可能需要先清理。