14

我正在尝试构建 3 个包,A、B 和 C。A 定义了一些在 B 和 C 中使用的基类。我将它们中的所有 3 个都放在同一个项目组中,都设置为输出相同自定义 BPL 输出文件夹。此文件夹位于 B 和 C 的搜索路径中。但是当我去构建 B 和 C 时,编译器在 Requires 列表中阻塞。“找不到所需的包‘A’。”

我如何告诉 B 和 C 在哪里可以找到 A 以便他们正确构建?

4

5 回答 5

15

要么找不到包,要么编译器混乱。在后一种情况下,重新启动有时会有所帮助。然后按顺序从所有包中手动构建。

如果确实找不到,请检查所有包(bpl 和 dcp)和 dcu 文件是否可用。你需要两者。

于 2009-04-18T19:41:20.800 回答
9

如果在 IDE 尝试加载包时发生这种情况:您的包输出目录(*.bpl 文件所在的位置)必须位于系统的 PATH 环境变量中。包是静态链接的 DLL,Windows 必须能够找到它们才能加载它们。

如果在构建包时发生这种情况:任何/所有 DCP 输出目录(*.dcp 文件所在的位置)必须位于相关项目的搜索路径中,以便编译器可以找到已编译的包。您也可以将包项目的 DCP 输出目录留空 - 在这种情况下,使用在 Tools\Options\Library 中设置的全局 DCP 输出目录;然后,依赖项目不需要将其包含在搜索路径中。

于 2009-04-18T19:55:34.323 回答
2

您尝试编译的包的“requires”子句中可能错误地指定了所需包的名称。举个例子:

我们有两个包 - VirtualTreesR.dpk 和 VirtualTreesD.dpk。VirtualTreesD 需要 VirtualTreesR。它们都具有“16”后缀,因此它们都在 Delphi 项目管理器窗口中显示为 VirtualTreesR16.bpl 和 VirtualTreesD16.bpl。你可能认为这些是包的名称,但你错了。包的名称仍然是 VirtualTreesR 和 VirtualTreesD,而不是 VirtualTreesR16 和 VirtualTreesD16。

编译 VirtualTreesR.dpk 时,Delphi 会生成两个文件(我这里不讨论 DCU)VirtualTreesR* 16 *.bpl 和 VirtualTreesR.dcp。看到不同?

然后我们尝试编译 VirtualTreesD.dpk 并得到错误:“[DCC 致命错误] VirtualTreesD.dpk(35): E2202 Required package 'VirtualTreesR16' not found”。

发生错误是因为 VirtualTreesD.dpk 包的“requires”子句包含以下行:


    requires
      designide,
      VirtualTreesR16;

Delphi 尝试查找 VirtualTreesR16.dcp 并失败,即使 Delphi 搜索路径和 PATH 环境变量设置正确,因为没有 VirtualTreesR16.dcp。只有 VirtualTreesR.dcp。

解决方案是修复“requires”子句,使其如下所示:


    requires
      designide,
      VirtualTreesR;

希望能帮助到你。

PS 这是一个非常令人沮丧的问题,因为这个名称不匹配并不明显,并且它的片段分散在不同的设置中。如果 Delphi 指定了它试图找到的确切文件(例如,'VirtualTreesR.dcp' 而不是 'VirtualTreesR'),它可能会更具体。

于 2013-04-03T08:51:05.007 回答
1

我会检查以确保您在哪里为包编写 .dcp 文件。一旦你有了这个,检查每个包的搜索路径是否有一个 .dcp 输出文件夹的条目。

于 2009-04-18T19:45:54.597 回答
0

通过 Delphi 项目管理器上下文菜单添加所需的包时,我有时会收到“找不到包”错误。(打开一个包,右键“Requires”,选择“Add Reference...”命令)

相反,通过手动编辑包项目文件来添加所需的包更容易:

  1. 在项目管理器中选择包。MyPackage.bpl例如。
  2. Ctrl+V打开项目文件。
  3. 将所需的包添加到 requires 子句。
  4. 确保所需的包 *.DCP 文件位于包搜索路径中。
于 2017-11-10T04:56:30.080 回答