FreePascal与Delphi单元版本兼容规则对比及Ultibo适配咨询
关于单元版本不一致编译规则的疑问
注意:本问题针对“unit与其他unit版本不一致编译”,而非“与编译器版本不一致编译”!此前编辑问题时可能表述不清,相关问题及Toon Krijthe的回答已明确此点。
我找到一个针对Delphi的相关问题,但该问题不适用于FreePascal。
在Delphi的相关回答中存在信息遗漏:Toon Krijthe于2009年1月9日19:52的回答提到,unit A和unit B均使用unit C,unit B和unit C已编译但unit B源码不可用。修改unit C(任意修改)并重新编译后,unit C的编译文件与unit B依赖的版本不同,因unit B无源码无法重编译,编译器报错。
但Delphi的真实规则是:
- 可任意修改unit的implementation部分,不会触发“unit版本不一致”问题(除非Delphi存在未知bug)
- 只要修改interface部分,若有使用该unit且无完整源码的unit存在,就会立即触发错误
我的疑问:
- FreePascal是否遵循与Delphi完全相同的规则(即仅修改implementation部分可行,不可修改interface部分,尤其是编译器自带unit)?
- 还是FreePascal的规则更严格,仅修改implementation部分也会引发问题?
- Ultibo作为FreePascal/Lazarus的特殊修改版本,是否遵循与FreePascal相同的规则?
注:Delphi通过编译器计算interface部分的校验和实现此逻辑,只要interface不变就无问题,修改后校验和不匹配会触发依赖unit重新编译。我对FreePascal经验有限,不清楚其是否遵循相同逻辑。
内容的提问来源于stack exchange,提问作者AHiismak
相关产品推荐
相关产品推荐

