Delphi:找不到所需的包

问题描述 投票:0回答:7

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

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

delphi path delphi-2009 package
7个回答
15
投票

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

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


9
投票

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

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


3
投票

您尝试编译的包的“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 Fatal Error] VirtualTreesD.dpk(35): E2202 未找到所需的包 'VirtualTreesR16'”。

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


    requires
      designide,
      VirtualTreesR16;

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

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


    requires
      designide,
      VirtualTreesR;

希望有帮助。

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


2
投票

我会检查以确保您在哪里编写包的 .dcp 文件。完成后,检查每个包的搜索路径是否有 .dcp 输出文件夹的条目。


1
投票

对我来说,当使用 32 位构建包“A”,但包“B”(需要包“A”)尝试使用 64 位构建时,会发生此错误。

DCP 和 BPL 文件都在那里(只是在错误的架构中),因此错误消息非常混乱。


0
投票

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

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

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

0
投票

页面 https://docwiki.embarcadero.com/RADStudio/Sydney/en/E2202_Required_package_%27%25s%27_not_found_(Delphi) 包含检查库路径中是否存在具有相关 *.dcp 文件的文件夹的建议。

© www.soinside.com 2019 - 2024. All rights reserved.