【发布时间】:2011-11-13 06:36:01
【问题描述】:
我得到的错误是这样的:
[DCC Fatal Error] myunit3.pas(244): E2411 Unit XBAT in package B_Dsgn refers to unit QBEE which is not found in any package. Packaged units must refer only to packaged units
我需要知道我遇到的这个错误的真正含义,以及如果可能的话如何排除和解决这些问题,特别是当错误消息中陈述的事实不正确时(这些单位实际上是指其他单位)其他有效的软件包)。
此类问题涉及包依赖关系。我在一系列三个设计时和三个运行时包方面遇到了一个有趣的问题,如下所示:
最奇怪的是,每次我清理和重建时,我都会在错误中得到一个不同的单元名称。 (上面显示的 Unit XBAT 指的是单元 QBEE)。
另一个奇怪的地方是它指的是处于顶级依赖关系中的单元,并且是已经构建的包的一部分。
步骤;
- 编译A,就可以了。
- 编译A_Dsgn,就可以了。
- 编译 B,就可以了。
- 编译B_Dsgn,就可以了。
- 编译 C,它失败并出现此 E2411 错误。
由于我怀疑有人能告诉我如何准确地解决这个问题,我正在寻找解决包中复杂依赖问题的步骤。例如,上述错误的字面意思表明,我应该有一个关于隐式链接单元的相应消息,而我没有。我已将所有隐式使用的单位添加到基本包 A 和 B,因此不会发出隐式单位警告。
我的下一个想法是将每个包的 DCU 输出文件夹分开,以防止 DCU 输出混淆编译器。现在我什至无法构建包。
更新我尝试使用 Explicit Rebuild 和 Rebuild as Needed 选项。我发现此错误与打开“按需重建”有关。当它关闭时,软件包会失败,并出现其他更重要的错误。我觉得奇怪的是编译器会发出奇怪的错误,可以通过关闭Rebuild as needed 来禁用这些错误。有什么想法吗?
更新 2 基本的底层问题并不能通过打开或关闭显式重建来解决。我没有收到此错误,而是遇到烦人的运行时/设计时包问题,这导致一组包无法同时加载。 (无法加载包 foo,因为它包含单元 bar,它也在包 bat 中。您想在下次加载项目时尝试加载此包吗?)。
【问题讨论】:
-
如果我理解正确,当检查“根据需要重建”时,然后建立c触发b的重建,后者触发了b_dsgn的重建 - 你确定你确定你是否有人t 引入了某种从 C/C_Dsgn 到 B/B_Dsgn 的循环依赖?
-
你在使用weak packaging吗?
-
好问题。明天上班我会搜索弱包装的参考。
-
@TOndrej:我看不出 pacakging 与它有什么关系。这不会改变哪个单元包含在哪个包中以及引用了哪些单元。它仅更改单元的链接方式(始终作为 BPL 的一部分或仅在需要时从 .dcp 文件复制并直接链接)。
-
IMO,这是一个delphi编译器错误。
标签: delphi compiler-errors delphi-xe