重新编译RTL - 如果可能,那么如何?

时间:2011-01-29 21:23:45

标签: delphi

我渴望通过修改Delphi运行时库(RTL)的下腹部system.pas等等来做一些实验......这是否有可能?

我非常喜欢“是的,但是你必须为某些汇编器魔法提供自定义.obj文件,因为它们从未与官方Delphi源一起分发”。我很好,我只是想知道。

我想用Delphi 7做这个实验,但是关于任何其他版本的内部信息都没问题。这是与石器时代以来与德尔福合作的公司的特权之一。

(我一直认为这是RTFM的一个问题,答案是响亮的“不!”,但由于某些原因谷歌不会证实它。)

2 个答案:

答案 0 :(得分:20)

您可以像任何其他单元一样重新编译RTL。

对于System.pas,您必须使用命令行编译器。

例如,这是一个工作批处理文件内容(有一些没有很好记录的命令行开关):

del *.dcu /s
"c:\program files\borland\delphi7\bin\dcc32.exe" -O+ -Q -M -Y -Z -$D+ System.pas 

这将重新编译System.pas和SysInit.pas(两个最低级别的RTL文件)。

但是为了使用重新创建的dcu文件,你必须将包含更新的dcu文件的文件夹放到IDE的第一个位置:例如,在Delphi 7中它是Option / Environment Options / Library,然后放入您的文件夹在“Libary path”和“Browsing path”字段中都是FIRST。

也许值得删除Delphi安装目录中的原始.dcu文件。

但请确保您不会更改本机的“接口”部分,否则您将无法使用其他未经修改的RTL(或第三方组件)单元进行编译。您可以更改“实现”部分,应用修复或重写某些部分以获得速度等,但不要更改“接口”部分以避免任何链接错误。

始终备份您要更改的原始.pas和.dcu文件。并且进行一些自动编译测试是个好主意,这样你就可以确定你对RTL的修改不会增加任何回归。

我们为Enhanced Run Time Library进行了这样的RTL重新编译,以提高低级RTL功能的速度(主要是System.pas和SysUtils.pas)。专为Delphi 7和2007设计。对于最新的Delphi版本,您仍然可以使用相同的原则。

答案 1 :(得分:16)

您只能从命令行重新编译RTL。在您的安装的RTL源目录中应该有一个makefile。它旨在与make.exe命令行实用程序一起使用,该实用程序应位于安装的“bin”文件夹中。我建议您将相关来源复制到一个单独的位置进行实验。我必须提醒您,系统单元与编译器紧密耦合,编译器希望许多函数具有特定名称并具有特定参数列表(如果有的话甚至声明)。许多RTL“帮助器”函数没有任何正式声明的参数,但期望参数以某种方式传递。

另一点需要注意的是更改某些类,函数或类型的接口声明。这样做可能会导致与现有DCU文件和组件严重不兼容。因此,在将包含的RTL或第三方组件中的DCU文件与自定义修改版本混合时,必须非常小心。我建议你首先只在进入界面破坏变化的矿区之前进行实施部分更改。