gpt4 book ai didi

delphi - 错误 F2063 无法编译使用的单元(依赖包的)

转载 作者:行者123 更新时间:2023-12-03 18:26:47 25 4
gpt4 key购买 nike

我编写了 2 个包:MEComps_DXE5 和 AMLComps_DXE5。后者取决于前者。两者都应该是多平台的:Win32、Win64 和(将来的)OSX。

当我打开第一个包 MEComps_DXE5 时,我可以编译它、构建它并安装它。我收到一些警告,因为该库包含也必须在旧 D5 上编译的代码,但构建成功并在预期位置创建了 dcu 和 dcp 文件。

当我打开第二个包AMLComps_DXE5时,我发现这种情况:

  • 如果我没有声明对 MEComps_DXE5 的依赖,该包将正确编译和构建(没有错误,生成 dcu 和 dcp 文件),但 Delphi 会警告我它已隐式导入单元来自 MEComps_DXE5,并要求我将包添加到依赖项列表(需要)
  • 如果声明了依赖项,则编译将失败,并显示“[dcc32 Fatal Error] MEComps_DXE5.dpk(52): F2063 Could not compile used unit 'MEClasses.pas'” ,其中 MEClasses 是 MEComps_DXE5 包的第一个单元。

这几天我一直在尝试解决这个问题,但没有成功。我正在两个方面开展工作:

  • 为什么 Delphi 甚至尝试编译另一个包?我刚刚构建并安装了它,并且拥有所有 dcus 和 dcp。
  • 为什么编译失败?

对于第一个问题,我完全不知道。

关于第二个问题,documentation在这种情况下是没有用的。它解释了为什么无法编译已使用的单元是致命的,并指出原因是通过查看以前的错误来确定的。但在这种情况下,没有以前的错误。

由于 MEComps_DXE5 实际上是自行编译和构建的,我怀疑这与语法或代码有什么关系。编译器似乎无法找到编译这些单元所需的东西。

这两个包分别位于各自的目录中。我将 MEComps\Win32 dcu 目录放在库路径和浏览路径上。 IDE 实际上在查找使用的单位时没有问题。

我还检查了 dcc32 命令行,似乎编译器知道所有涉及的目录。

我可以添加的其他信息:

  • 两个包都有自己的包含文件(在其源目录中)。我不确定这些是否包含在包包含列表中,但我已经尝试了两种方法,但似乎没有任何改变。
  • 这两个包都有一个相应的 Delphi 5 包,其中包含一些相同的单元和代码(尽管 dpk 不同)。这些可以正确编译和构建。 Delphi 5 dcu 文件在源目录中生成。这会给 XE5 编译器带来问题吗?
  • 以下是 MEComps_DXE5 包的完整代码。我看到 Delphi 在创建空包时插入了很多编译器指令。我没有碰那些:

        package MEComps_DXE5;

{$R *.res}
{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
{$ALIGN 8}
{$ASSERTIONS ON}
{$BOOLEVAL OFF}
{$DEBUGINFO ON}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
{$LOCALSYMBOLS ON}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION OFF}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$REFERENCEINFO ON}
{$SAFEDIVIDE OFF}
{$STACKFRAMES ON}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST OFF}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
{$DEFINE DEBUG}
{$ENDIF IMPLICITBUILDING}
{$IMPLICITBUILD ON}

requires
rtl,
fmx,
dbrtl,
xmlrtl;

contains
MEClasses in 'MEClasses.pas',
MEConsts in 'MEConsts.pas',
MEDataReader in 'MEDataReader.pas',
MEDateUtils in 'MEDateUtils.pas',
MEEncoding in 'MEEncoding.pas',
MEEncodingISO2022 in 'MEEncodingISO2022.pas',
MEFileUtils in 'MEFileUtils.pas',
MELists in 'MELists.pas',
MEMath in 'MEMath.pas',
MENumUtils in 'MENumUtils.pas',
MESQLUtils in 'MESQLUtils.pas',
MEStrUtils in 'MEStrUtils.pas',
MESysUtils in 'MESysUtils.pas',
METypes in 'METypes.pas',
MEURIUtils in 'MEURIUtils.pas',
MEXMLUtils in 'MEXMLUtils.pas';

end.

最佳答案

Delphi IDE 在编辑/编译包方面远非完美,但您应该自己解决问题 - 更好地配置您的包,Delphi 将正确编译它们。

我只能为您提供针对所给信息的一般建议:

  • 如果您需要 2 个包的通用包含文件,请为该文件创建一个单独的目录,并将该目录添加到两个包的搜索路径中(在 Base 构建配置中)。

  • 切勿将 .dcu 与源文件放在同一文件夹中;始终为您的包设置“单元输出目录”选项(也在Base构建配置中);我推荐 $(BDSCOMMONDIR)\MyPacks\$(Config)\$(Platform) 作为您的包的目录;如果源 (.pas) 文件夹中已有 .dcu,请删除它们,无论哪个 Delphi 版本创建了这些 .dcu。

  • 切勿将依赖包源的路径添加到搜索路径,仅将已编译的 .dcu 的路径添加到搜索路径(将是 $(BDSCOMMONDIR)\MyPacks\$(Config)\$(Platform)如果您遵循之前的建议)。

关于delphi - 错误 F2063 无法编译使用的单元(依赖包的),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28084508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com