gpt4 book ai didi

delphi - 为什么我自己的文件的单位是 "compiled with a different version"?

转载 作者:行者123 更新时间:2023-12-03 14:38:02 25 4
gpt4 key购买 nike

我正在构建一个使用插件的程序。不幸的是,插件框架的动态链接迫使 RTL 和 VCL 从我的项目 EXE 中移出并进入 BPL 版本,并且它们没有启用调试信息。

因此,我构建了一个静态链接到我的插件的测试框架,这样我就可以在跟踪代码时实际看到我在做什么。但现在,每次我尝试重新编译时,都会收到错误:“unit turbu_skills 是使用不同版本的 turbu_database.GDatabase 编译的”

我以前见过这个错误,但只有当我更改了我可能不应该更改的内容时,例如 RTL 或 VCL 库。我不明白为什么它用我自己的代码这样做。 turbu_skills 和 turbu_database 单元都是我自己编写的单元。 GDatabase 是一个全局单例变量,其类定义我已经好几周没有更改了。任何触发重新编译的更改都会导致此错误,即使我没有触及任何一个单元中的任何内容。

进行完整构建 (SHIFT-F9) 会使其正确编译。但是,如果我随后按一个单位(任何单位)中的 SPACE 并按 F9,我会再次收到错误。发生了什么事以及如何阻止它?这不会发生在主应用程序中,只会发生在测试框架中。

编辑:我有我所有单位的来源。删除 DCU 和类似文件没有帮助。将整个项目复制到另一台计算机,删除所有 DCU,然后在那里构建并没有帮助。我的程序布局和编译器之间存在客观的、可重现的冲突,我想消除它。

来源可以在 http://www.turbu-rpg.com/downloads/Turbu_source_setup.exe 找到如果有人想测试它。它需要已安装 JVCL 的 Delphi 2009;安装程序包将处理其余的事情。也许提供可用的源代码将有助于某人追踪此问题。我当然希望如此,因为无论问题出在哪里,我都无法解决。该问题可以在testing.exe 中找到,也可以在turbu.groupproj 中的turbu.exe 中找到。

编辑2:事实证明这是另一个跨单元泛型问题。咕噜。我设法编写了一个解决方法。我只是希望他们尽快解决泛型问题。

最佳答案

错误“单元是用不同版本的...编译的”是一个烦人的错误。它发生在如下情况:

     +--------+
| unit A |
+--------+
| |
| |
V |
+--------+ |
| unit B | |
+--------+ |
| |
| |
V V
+--------+
| unit C |
+--------+

单元 A 和 B 都使用单元 C,单元 B 使用 C。单元 B 和 C 已编译,但由于某种原因,单元 B 的源代码不可用。现在单元 C 已更改(任何更改都会进行并重新编译)并且单元 C 的 dcu 与单元 B 使用的单元 C 不同,因此单元 B 也需要重新编译。但不幸的是,源代码不可用,因此编译器放弃了。

尚不完全清楚您的情况出了什么问题。

您有一个链接到插件的测试框架。那么单元 X 和 Y 适合在哪里,您认识上面显示的模式吗?

但完整的构建可以解决问题这一事实暗示了这个方向。这并不是我第一次看到部分重新编译的问题。所以我总是使用完整版本。

关于delphi - 为什么我自己的文件的单位是 "compiled with a different version"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/429275/

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