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

Pau*_*Jan 21 delphi

我有这个想要做一些实验来修改Delphi运行时库(RTL)的下腹部,system.pas以及喜欢......这可能与否?

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

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

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

Arn*_*hez 21

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

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

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

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

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

但是为了使用重新创建的dcu文件,您必须将包含更新的dcu文件的文件夹放入IDE的第一个位置:例如,在Delphi 7中它是选项/环境选项/库,然后将您的文件夹置于FIRST在"Libary路径"和"浏览路径"字段中.

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

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

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

我们为增强的运行时库进行了这样的RTL重新编译,以便更好地加速低级RTL功能(主要是System.pas和SysUtils.pas).专为Delphi 7和2007设计.对于最新的Delphi版本,您仍然可以使用相同的原则.


All*_*uer 16

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

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

  • 我们称之为RTL?对于System.pas和SysInit.pas,只能从命令行完成.但对于其他更高级别的单元(如Classes.pas或SysUtils.pas),只需更改IDE选项中较旧的库文件,并提供另一个将使用的.pas源代替默认版本. (2认同)