0

两天前,当我最近的 Lazarus Pascal 项目开始发出一个奇怪的 CIRCULAR REFERENCE 错误时,我感到很困惑。

我现在已经删除了项目的所有元素,并且只打开了 LPR 文件。当我按 F9 编译并运行时,我看到了同样的错误。所以我怀疑有一些旧的输出文件搞砸了。

如何识别和删除它们以便我的项目能够编译?

我正在使用带有 Lazarus 1.0.10 + PostgreSQL 的 Ubuntu 12.04

太感谢了!

编辑:2013-11-02

我刚从海啸中回来!我尝试了很多东西,最后格式化了我的操作系统并重新回来。新项目运行良好。但是我有问题的旧项目仍然是一样的。它触发循环引用错误:

stdctrls.pp(9,52) Fatal: Circular unit reference between StdCtrls and LCLIntf

有趣的是,这条线是空白的。前后都有评论。我关心的是为什么?我没有在我的代码中的任何地方使用 LCLIntf。

编辑:2013-11-03

我注意到一件奇怪的事情。我有一个项目的 LPS 文件。它有一些引用 StdCtrls 的条目。然后我将项目选项更改为不使用会话文件。相反,它仅使用 LPI 文件。但是现在我在我的 LPI 文件中找到了相同的 StdCtrls 条目。我不知道为什么会这样。我打开了引用 StdCtrls 的 LPI 文件条目(甚至删除了备份文件)。但是每次我在拉撒路打开它时,条目又回到了那里。

这是我找到并删除的条目。

  <Unit29>
    <Filename Value="/usr/share/lazarus/1.0.12/lcl/stdctrls.pp"/>
    <UnitName Value="StdCtrls"/>
    <WindowIndex Value="0"/>
    <TopLine Value="1"/>
    <CursorPos X="52" Y="9"/>
    <UsageCount Value="10"/>
  </Unit29>

我坚信这是导致循环引用错误的原因。

关于如何摆脱这个并修复我的项目的任何想法?

谢谢!

4

2 回答 2

0

还有其他可能的原因。相互引用可能会导致看似稍纵即逝的行为(取决于编译顺序)。跨单元内联加剧了它。

尝试将其最小化为几个单元,然后使用相互引用(单元相互使用,直接或作为使用循环的一部分),并首先禁用相关单元中的所有内联。

于 2013-10-29T20:48:07.767 回答
0

尝试使用 Shift-F9 - 它会运行build,它应该从头开始编译所有文件。如果这仍然没有帮助,您可以尝试删除一些.ppu已编译单元的文件。但是,请注意不要删除 Lazarus 自己的.ppu,这是编译所需的。

于 2013-11-02T07:31:04.057 回答