2011-01-29 7 views
19

Mam ochotę zrobić kilka eksperymentów z modyfikowaniem podbrzusza biblioteki czasu pracy Delphi (RTL), system.pas i tym podobnych ... Jest to możliwe, czy nie?Rekompilacja RTL - jeśli to możliwe, to w jaki sposób?

Bardzo lubię wyzwania takie jak "tak, ale będziesz musiał dostarczyć niestandardowe pliki .obj dla niektórych kreatorów asemblera, ponieważ nigdy nie były dystrybuowane z oficjalnym źródłem Delphi". W porządku, chcę tylko wiedzieć.

Chcę przeprowadzić ten eksperyment z Delphi 7, ale informacje wewnętrzne na temat każdej innej wersji są w porządku. To jedna z zalet bycia z firmą, która współpracowała z Delphi od epoki kamienia.

(I zawsze zorientowali, że jest to jedno z tych pytań RTFM z odpowiedzią jest zdecydowane „NIE!”, Ale z jakiegoś powodu Google nie potwierdzają.)

Odpowiedz

19

Możesz przekompilować RTL, tak jak każdą inną jednostkę.

Dla System.pas należy użyć kompilatora wiersza poleceń.

Na przykład o to roboczego zawartość pliku wsadowego (nie jest jakaś dobrze udokumentowane linii poleceń):

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

To rekompilacji System.pas i SysInit.pas (zarówno najniższy poziom pliki RTL) .

Jednak aby użyć odtworzonych plików DUC, musisz umieścić folder zawierający zaktualizowane pliki Dcu na pierwszej pozycji IDE: na przykład w Delphi 7 jest to Option/Environment Options/Library, a następnie umieść swój folder FIRST w polu "Ścieżka dostępu" i "Ścieżka przeglądania".

Być może warto usunąć oryginalne pliki .dcu w katalogu instalacyjnym Delphi.

Ale upewnij się, że nie zmienisz części interfejsu "interfejsu" lub będziesz mieć problemy z kompilacją z innymi niezmodyfikowanymi jednostkami RTL (lub komponentami innych producentów). Możesz zmienić część "implementacji", zastosować poprawki lub przepisać część dla prędkości lub podobną, ale nie zmieniaj części "interfejs", aby uniknąć błędu linkowania.

Zawsze wykonuj kopie zapasowe oryginalnych plików .pas i .dcu, które zmieniasz. Dobrym pomysłem jest wykonanie automatycznego testu kompilacji, abyś mógł być pewien, że twoje modyfikacje RTL nie dodadzą żadnej regresji.

Dokonaliśmy takiej rekompilacji RTL dla naszego Enhanced Run Time Library dla lepszej szybkości niskopoziomowych funkcji RTL (głównie System.pas i SysUtils.pas). Zaprojektowany dla Delphi 7 i 2007. W przypadku nowszych wersji Delphi nadal możesz korzystać z tej samej zasady.

+0

Dzięki za wyraźne napisanie, poparte ciężkim doświadczeniem. Doskonały! –

16

Można tylko skompilować RTL z wiersza poleceń. Powinien być plik Makefile w katalogu źródłowym RTL twojej instalacji. Został zaprojektowany do użycia z narzędziem wiersza poleceń make.exe, które powinno znajdować się w folderze "bin" instalacji. Zaleciłbym skopiowanie odpowiednich źródeł do oddzielnej lokalizacji w celu eksperymentowania. Muszę was ostrzec, że jednostka systemowa jest ściśle sprzężona z kompilatorem, który oczekuje, że wiele funkcji ma określoną nazwę i mają określone listy parametrów, jeśli jakiekolwiek są nawet zadeklarowane. Wiele funkcji "pomocnika" RTL nie ma formalnie zadeklarowanych parametrów, ale oczekuje, że parametry będą przekazywane w pewien sposób.

Kolejną ostrożnością jest zmiana deklaracji interfejsu dla pewnych klas, funkcji lub typów. Może to spowodować poważne niezgodności z istniejącymi plikami i komponentami DCU. Z tego powodu należy zachować ostrożność podczas mieszania plików DCU z dołączonych RTL lub komponentów innych producentów z niestandardowymi zmodyfikowanymi wersjami. Sugerowałbym, abyś zaczął od dokonywania zmian w sekcji implementacji dopiero przed wejściem do pola minowego interfejsu zmieniającego zmiany.

+0

Pamiętam, że kiedyś kompilator polegał na kolejności deklaracji System.pas. Minęło wiele lat, odkąd skompilowałem RTL, więc mogło to być w erze Turbo Pascal/Delphi 1 (16-bit). –

+2

Co nazywamy RTL? W przypadku System.pas i SysInit.pas można to zrobić tylko z wiersza poleceń. Ale w przypadku innych jednostek wyższego poziomu (takich jak Classes.pas lub SysUtils.pas) można to zrobić z poziomu IDE, po prostu zmieniając pliki biblioteki starsze w opcjach IDE i dostarczając inne źródło .pas, które będzie używane zamiast domyślna wersja. –

+0

Jak pamiętam, Variants.pas nie może być łatwo przekompilowany nawet bez żadnych zmian. – Torbins

Powiązane problemy