我正在尝试构建 3 个包,A、B 和 C。A 定义了 B 和 C 中使用的一些基类。我将所有 3 个包都放在同一个项目组中,所有这些都设置为输出到相同的自定义 BPL 输出文件夹。该文件夹位于 B 和 C 的搜索路径中。但是当我去构建 B 和 C 时,编译器在 Requires 列表中卡住了。 “未找到所需的包‘A’。”
我如何告诉 B 和 C 在哪里可以找到 A,以便他们正确构建?
要么找不到包,要么编译器混乱。在后一种情况下,重新启动有时会有所帮助。然后按顺序从所有包手动构建。
如果确实找不到,请检查所有包(bpl 和 dcp)和 dcu 文件是否可用。两者都需要。
如果在 IDE 尝试加载包时发生这种情况:您的包输出目录(*.bpl 文件所在的位置)必须位于系统的 PATH 环境变量中。包是静态链接的 DLL,Windows 必须能够找到它们来加载它们。
如果在构建包时发生这种情况:任何/所有 DCP 输出目录(*.dcp 文件所在的位置)都必须位于依赖项目的搜索路径中,以便编译器可以找到已编译的包。 您还可以将包项目的 DCP 输出目录留空 - 在这种情况下,将使用 Tools\Options\Library 中设置的全局 DCP 输出目录;依赖项目不需要将其包含在其搜索路径中。
您尝试编译的包的“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”),则它可能会更具体。
我会检查以确保您在哪里编写包的 .dcp 文件。完成后,检查每个包的搜索路径是否有 .dcp 输出文件夹的条目。
对我来说,当使用 32 位构建包“A”,但包“B”(需要包“A”)尝试使用 64 位构建时,会发生此错误。
DCP 和 BPL 文件都在那里(只是在错误的架构中),因此错误消息非常混乱。
通过 Delphi 项目管理器上下文菜单添加所需的包时,我有时会收到“找不到包”错误。 (打开一个包,右键单击“Requires”,选择“Add Reference...”命令)
相反,通过手动编辑包项目文件来添加所需的包会更容易:
MyPackage.bpl
。 Ctrl+V
打开项目文件。页面 https://docwiki.embarcadero.com/RADStudio/Sydney/en/E2202_Required_package_%27%25s%27_not_found_(Delphi) 包含检查库路径中是否存在具有相关 *.dcp 文件的文件夹的建议。