Delphi: 找不到必需的包

14

我正在尝试构建三个包,A、B和C。 A定义了一些基类,这些基类在B和C中使用。 我将它们全部放在同一个项目组中,并设置为输出到相同的自定义BPL输出文件夹。 该文件夹在B和C的搜索路径中。 但是当我尝试构建B和C时,编译器会在Requires列表上出现错误。"未找到所需的包 'A'"。

我该如何告诉B和C去哪里找A以便它们能正确地构建?


2
验证一下,即使像你这样的超级明星也会遇到这样的问题!(你在这里帮助过我很多次)。感谢您清晰的问题发布。 - Jamo
2
我遇到了同样的问题。文件存在,文件夹存在,路径已设置。Delphi说它找不到一个包。要么是它不喜欢DCP文件、BPL文件或者文件夹/路径配置有误。真是太棒了。 - Warren P
6个回答

15

可能是找不到该软件包,或者编译器出现了混乱。在后一种情况下,有时重新启动可以解决问题。然后按顺序从所有软件包进行手动构建。

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


6
那其实就是问题所在。我还需要告诉它在哪里找到DCP文件。 - Mason Wheeler
曾经为此苦恼过一次。 - Toon Krijthe
现在我的 Delphi 遇到了一个问题,就是存在一个 DCP 文件,但是还有其他不稳定的因素导致它无法读取该 DCP 文件,无论重启多少次或者重新构建都没有帮助。 - Warren P

9
如果在IDE试图加载包时发生这种情况:你的包输出目录(*.bpl文件所在的目录)必须在系统的PATH环境变量中。包是静态链接的DLL,Windows必须能够找到它们以加载它们。
如果在构建包时出现此问题:任何/所有DCP输出目录(*.dcp文件所在的目录)都必须在依赖项目的搜索路径中,以便编译器可以找到已编译的包。 你也可以将包项目的DCP输出目录保留为空-在这种情况下,工具\选项\库中设置的全局DCP输出目录将被使用;然后依赖项目就不需要将其包含在搜索路径中。

哇,BPL文件夹不在你的路径中。IDE应该会抱怨这个问题。 - Warren P

3
在您尝试编译软件包时,'requires'从句中所需软件包的名称可能被错误地指定。我们来看一个例子:
我们有两个软件包-VirtualTreesR.dpk和VirtualTreesD.dpk。VirtualTreesD需要VirtualTreesR。它们都带有“16”后缀,因此在Delphi项目管理器窗口中都显示为VirtualTreesR16.bpl和VirtualTreesD16.bpl。您可能认为这些是软件包的名称,但您错了。软件包的名称仍然是VirtualTreesR和VirtualTreesD,而不是VirtualTreesR16和VirtualTreesD16。
当编译VirtualTreesR.dpk时,Delphi会生成两个文件(我不谈论DCUs)VirtualTreesR*16*.bpl和VirtualTreesR.dcp。看到区别了吗?
然后我们尝试编译VirtualTreesD.dpk并收到错误消息:“[DCC致命错误] VirtualTreesD.dpk(35):未找到必需软件包'VirtualTreesR16'”。该错误发生是因为VirtualTreesD.dpk软件包的'requires'从句包含以下行:
requires designide, VirtualTreesR16;
即使Delphi搜索路径和PATH环境变量设置正确,Delphi也会尝试查找VirtualTreesR16.dcp并失败,因为没有VirtualTreesR16.dcp,只有VirtualTreesR.dcp。
解决方法是修改'requires'从句,使其像下面一样:
requires designide, VirtualTreesR;
希望可以帮到您。
补充:这是一个相当令人沮丧的问题,因为这种名称不匹配并不明显,其片段分散在不同的设置中。如果Delphi指定了它尝试查找的确切文件(例如“VirtualTreesR.dcp”而不是“VirtualTreesR”),那么它可能更加具体。

1
我会检查一下您写入软件包的 .dcp 文件的位置。一旦确定了这个位置,再检查每个软件包的搜索路径是否有 .dcp 输出文件夹的条目。

0

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

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

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

0

对我来说,这个错误发生在使用32位构建软件包"A"时,但是需要软件包"A"的软件包"B"试图使用64位进行构建。

DCP和BPL文件都存在(只是架构不正确),所以错误消息非常令人困惑。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接