Delphi包问题: Packaged units must refer only to packaged units.。 (E2411)

标签 delphi compiler-errors delphi-xe

我得到的错误是这样的:

[DCC fatal error ] myunit3.pas(244): E2411 包 B_Dsgn 中的单元 XBAT 指的是在任何包中都找不到的单元 QBEE。打包单位必须仅指打包单位

我需要知道我遇到的这个错误的真正含义,以及如果可能的话如何排除和解决此类问题,特别是当错误消息中陈述的事实不正确时(这些单位实际上指的是其他有效的包)。

此类问题涉及包依赖性。我遇到了一个有趣的问题,涉及一系列三个设计时和三个运行时包,如下所示:

enter image description here

最奇怪的是,每次我清理和重建时,我都会在错误中得到不同的单位名称。 (如上所示,单位XBAT指的是单位QBEE)。

另一个奇怪的事情是,它指的是处于顶级依赖关系中的单元,并且是已经构建的包的一部分。

步骤;

  1. 编译A,可以运行。
  2. 编译A_Dsgn,可以运行。
  3. 编译 B,它可以工作。
  4. 编译B_Dsgn,可以运行。
  5. 编译 C,但失败并出现此 E2411 错误。

由于我怀疑有人能告诉我如何准确解决此问题,因此我正在寻找解决包中复杂依赖问题的步骤。上述错误的字面意义表明,例如,我应该有一条关于隐式链接单元的相应消息,但我没有。我已将所有隐式使用的单元添加到基础包 A 和 B 中,这样就不会发出隐式单元警告。

我的下一个想法是分离每个包的 DCU 输出文件夹,以防止 DCU 输出混淆编译器。现在我什至无法构建软件包。

更新我尝试使用显式重建根据需要重建选项。我发现此错误与打开“根据需要重建”有关。当它关闭时,包会失败并出现其他更重要的错误。我觉得奇怪的是,编译器会发出奇怪的错误,可以通过关闭按需重建来禁用这些错误。有什么想法吗?

更新 2 根本问题并不能通过打开或关闭显式重建来解决。我没有收到此错误,而是遇到烦人的运行时/设计时包问题,这会导致一组无法同时加载的包。 (无法加载包 foo,因为它包含单元 bar,而单元 bar 也在包 bat 中。您想在下次加载项目时尝试加载此包吗?)。

最佳答案

我怀疑这是一个不起眼的编译器错误。

我经历过的项目至少有4个级别的依赖运行时包:

包A <- 包B <- 包C <- 包D

E2411 Unit '%s' in package PackageD refers to unit '%s' which is not found in any package. Packaged units must refer only to packaged units.

我发现唯一有效的解决方案是使包 A、B 和 C 永远不会构建(即显式构建)包并使用 Project Dependencies改为强制执行构建顺序。我必须让这三个都永远不会构建,否则我会得到

E2220 Never-build package '%s' requires always-build package '%s'

我知道这可能不是您正在寻找的答案,但它就在那里。

顺便说一句,这在 Delphi 2009 中发生在我身上。

关于Delphi包问题: Packaged units must refer only to packaged units.。 (E2411),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7353285/

相关文章:

delphi - DELPHI 和 Opencv 中的不兼容类型

ms-access - VBA - "Compile Error: Method or data member not found"

java - 是什么原因导致 "Can' t find Symbol”以及如何解决?

delphi - Wiki:Delphi 第 3 方 TCP/IP 组件库的最新技术水平

delphi - Advantage 表文件在使用中出错。我该如何解决?

delphi - FillRect 不会在 Delphi XE2 中绘制完整的 TStringGrid 单元格

delphi - 显示特定区域字符

德尔福XE5 : Tooltip evaluation expression not working any more

delphi - 使用关联程序打开文件

c++ - 得到错误 "left of ' .toString' 必须有类/结构/union ”,即使 toString 应该有一个合适的对象