我正在尝试构建 3 个包,A、B 和 C。A 定义了一些在 B 和 C 中使用的基类。我将它们中的所有 3 个都放在同一个项目组中,都设置为输出相同自定义 BPL 输出文件夹。此文件夹位于 B 和 C 的搜索路径中。但是当我去构建 B 和 C 时,编译器在 Requires 列表中阻塞。“找不到所需的包‘A’。”
我如何告诉 B 和 C 在哪里可以找到 A 以便他们正确构建?
我正在尝试构建 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 致命错误] 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'),它可能会更具体。
我会检查以确保您在哪里为包编写 .dcp 文件。一旦你有了这个,检查每个包的搜索路径是否有一个 .dcp 输出文件夹的条目。
通过 Delphi 项目管理器上下文菜单添加所需的包时,我有时会收到“找不到包”错误。(打开一个包,右键“Requires”,选择“Add Reference...”命令)
相反,通过手动编辑包项目文件来添加所需的包更容易:
MyPackage.bpl
例如。Ctrl+V
打开项目文件。