Подтвердить что ты не робот

Перекомпиляция RTL - если возможно, то как?

У меня есть такая потребность в некоторых экспериментах по модификации подбрюшья библиотеки времени выполнения Delphi (RTL), system.pas и подобных... Возможно или нет?

Мне очень нравятся такие проблемы, как "да", но вам нужно предоставить пользовательские файлы .obj для какого-либо ассемблерного волшебства, потому что они никогда не распространялись с официальным источником Delphi ". Хорошо со мной, я просто хочу знать.

Я хочу сделать этот эксперимент с Delphi 7, но внутренняя информация о любой другой версии в порядке. Это один из преимуществ быть с компанией, которая работала с Delphi с каменного века.

(Я всегда думал, что это один из тех вопросов RTFM, при этом ответ звучит "НЕТ!", но по какой-то причине Google не подтвердит его.)

4b9b3361

Ответ 1

Вы можете перекомпилировать 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, затем установите вашу папку FIRST в поле "Libary path" и "Browsing path".

И, возможно, стоит удалить исходные файлы .dcu в каталоге установки Delphi.

Но убедитесь, что вы не измените часть "интерфейса" устройства, иначе у вас возникнут проблемы с компиляцией с другими не измененными модулями RTL (или сторонних компонентов). Вы можете изменить часть "реализация", применить исправления или переписать какую-либо часть для скорости или таковой, но не меняйте "интерфейс", чтобы избежать какой-либо ошибки связывания.

Всегда делайте резервную копию исходных файлов .pas и .dcu, которые вы меняете. И неплохо сделать какой-то автоматизированный тест компиляции, чтобы вы могли быть уверены, что ваши модификации RTL не добавят регрессии.

Мы сделали такую ​​рекомпиляцию RTL для нашей расширенной библиотеки времени выполнения для лучшей скорости низкоуровневых функций RTL (в основном System.pas и SysUtils.pas). Предназначен для Delphi 7 и 2007. Для более поздней версии Delphi вы все равно можете использовать тот же принцип.

Ответ 2

Вы можете перекомпилировать RTL только из командной строки. В исходном каталоге RTL вашей установки должен быть makefile. Он предназначен для использования с утилитой командной строки make.exe, которая должна находиться в папке "bin" вашей установки. Я бы рекомендовал вам скопировать соответствующие источники в отдельное место для экспериментов. Я должен предупредить вас, что системный блок тесно связан с компилятором, который ожидает, что многие функции будут иметь конкретное имя и будут иметь определенные списки параметров, если они даже объявлены. Многие функции "helper" RTL не имеют формально объявленных параметров, но ожидают, что параметры будут переданы определенным образом.

Еще одна осторожность - это изменение деклараций интерфейса определенных классов, функций или типов. Это может привести к серьезной несовместимости с существующими файлами и компонентами DCU. По этой причине вы должны быть очень осторожны при смешивании файлов DCU с включенными RTL или сторонними компонентами с вашими измененными версиями. Я бы посоветовал вам начать с того, что изменил только раздел реализации, прежде чем впасть в минные поля интерфейса, нарушающие изменения.