0

GNAT Programming Suite (Win XP でホスト) を使用して、ビルド中にパッケージ参照を解決しようとしています。Builder の結果に、次のようなエラーが表示されます。

file "ac_configuration_s.ada" not found

エラーをクリックすると、次のような行に移動します。

with

    Ac_Configuration,
    Dispense_Timer,
    ...

最初の項目 (Ac_Configuration) は解決されませんが、2 番目の項目 (Dispense_Time) は解決されます。解決する、または解決しない他のいくつかがあります。問題のファイル (spec と body) はすべてソース ファイルとして識別されます。

エラーのある行にマウスを合わせると、次のようなポップアップが表示されます。

(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"

「最小」スイッチへの参照がありません。

この場合、対応する本体ファイル file D_Ac_Config_S.Adaはありません。したがって、個別にコンパイルする本体ファイルはありません。

with内のパッケージ参照を右クリックすると、 Ac_Configurationの宣言と、エラーの原因となっている他のすべてのパッケージ名に移動できます。したがって、これらの lreferences は何らかの形で解決されています。

ちなみに、私はADAを使ったことがないので、まだすべてを理解しようとしています。

4

2 に答える 2

2

_s.adaスペックの接尾辞として使っているようですが_b.ada、体のことでしょうか?

GNAT は、この命名規則に問題がある可能性があります。GNAT プロジェクトファイル ( .gpr)を使用して、GNAT の既定の規則({unit-name}.adsスペック、{unit-name}.adb本体) を変更することは可能ですが、ルール (「Spec_Suffix」を参照) では、「アンダースコアの後に英数字を続けて開始することはできません」と規定されています (私は「これを試してみましたがFoo_S、たとえば 、パッケージがある場合、問題が混乱することがわかります)。
後で: GNAT (GPL、4.7、4.8) はあなたの接尾辞に非常に満足していることがわかりました!

パッケージAc_Configurationが実際に の 85 行目で宣言されたローカル パッケージである場合はD_Ac_Config_S.Ada、問題があります。ライブラリ ユニットのみを使用できます。withこの場合は になりますD_Ac_Config

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

D_Ac_Config_S.Ada(たとえば)実際に複数のエイダユニットが含まれているのだろうか?(そうであれば、そのファイルをコンパイルすると、 などのコンパイル エラーが発生するはずですend of file expected, file can have only one compilation unit)。GNAT はコンパイル時にこれをサポートせず、代わりにユーティリティgnatchopを提供します。

gnatchopすべてのソースだけにして、それで完了することは可能でしょうか?

于 2013-02-13T21:58:32.107 に答える
0

うーん、コンパイラが動作しているオブジェクト/ ALIのセットが不良であるように思われるので、相互参照は最新のエラーではありません。(通常、コンパイラーは最新の状態に保つのに優れていますが、プロジェクトに「最小限の再コンパイル」スイッチが設定されているかどうかを確認することをお勧めします。)

["owning"]ファイルだけをコンパイルしてみましたD_Ac_Config_S.Adaか?(つまり、仕様の場合は、対応する本文に移動してコンパイルします。)これにより、ALI/オブジェクトファイルが強制的に更新されます。

次に、通常どおりにビルドしてみます。

--PS:最初に掃除する必要があるかもしれません。

于 2013-02-13T21:33:00.770 に答える