Studna
Studna > ╚lßnky > Runtime Error at ... > RTE 00:04



Runtime Error at 00:04 aneb Linkovßnφ

Tato Φßst serißlu bude trochu jinß. Po n∞kolika dφlech, ve kter²ch Ülo o to, jak co ud∞lat, je tento dφl zam∞°en na praktickΘ u₧itφ jednΘ mo₧nosti kompilßtoru paskalu a myslym ₧e i cΘΦka.

Dφval jsem se na dema, kterß vyhrßvajφ mezinßrodnφ sout∞₧e, nap°. Assembly, Gathering a dalÜφ. Jednß se nap°φklad o Second Reality od Future Crew, Crystal Dreams od Tritonu, n∞kolik dem od Juice a dßle o 64kb dema od r∙zn²ch autor∙. V∞tÜina 64kb dem je programovanß v pascalu a kompilovßna v BP7 a tvo°φ je jen jedin² soubor, pop°. n∞kolik textov²ch soubor∙ o teamu a demu a tzv. bbs-intra. Jeliko₧ demo je jen jedin² soubor, musφ v n∞m b²t grafika, hudba, texty a program. VÜe je pak zapakovßno v∞tÜinou PKLitem, LZExem nebo UCExem.

Jak dosßhnout jednoho souboru. Binßrnφ soubor p°evedeme do .obj fajlu pomocφ programu binobj, kter² je v instalaci BP. To se ud∞lß takto:

binobj	  vstupnφ_jmeno   jmeno_obj_fajlu  jmeno_procedury

kde vstupni_jmeno a jmeno_obj_fajlu jsou jmΘna soubor∙ a jmeno_proceduty je jmΘno, kter²m se na nßÜ obj fajl budeme odvolßvat.

Vytvo°en² obj fajl pou₧ijeme ve zdrojßku nap°. takto:

procedure obrazek; external; {$l soubor.obj}

pokud se nßÜ obj fajl jmenuje soubor a jmΘno procedury je obrazek.

Na takto p°ilinkovanou proceduru se odkazujeme pomocφ ukazatel∙. To se d∞lß velice jednoduÜe syntaxφ @obrazek a podobn∞. V podstat∞ se tφm nahradφ pou₧itφ p°φkaz∙ blockread, getmem a freemem, kterΘ Φasto fungujφ Üpatn∞.

Takto se dß jednoduÜe nalinkovat do exßΦe sampl, obrßzek, font, texty a dalÜφ blb∙stky a nemusφme mφt strach, aby byl rozÜi°ovßn cel² program bez chyb∞jφcφch soubor∙. M²m snem jsou toti₧ programy, kterΘ tvo°φ jeden exßΦ, jeden datov² soubor, textov² soubor readme a n∞kolik soubor∙ s u₧ivatelsk²mi daty pop°. ulo₧en²mi pozicemi u her.

Pokud vyu₧φvßme linkovßnφ a₧ p°φliÜ mnoho, narazφme na omezenφ kompilßtoru, kter² nahlßsi chybu, proto₧e code segment je delÜφ ne₧ 64kb (nebo n∞co okolo). To se dß vy°eÜit pomocφ chyt°e vymyÜlenych unit∙, do kter²ch proced∙ry "rozstrkßme".

P°φklad dneska nebude, kochejte se m²mi demßΦi a Φekejte na gamesu od No!fUtuRe.

Pozn. °ekl bych, ₧e systΘm linkovßnφ byl vymyÜlen hlavn∞ pro linkovßnφ obj fajl∙ z TASM nebo C/C++. Ale jak vidφm, dß se s tφm d∞lat docela dost v∞cφ a je to hodn∞ rychl², proto₧e je vÜe v pam∞ti. KoneΦn² exefajl DOPORU╚UJI zkomprimovat PKLItem, UCExem nebo jin²m dalÜφm exepackerem.

To¥ vÜe pro dneÜek.


kontakt:
mail jislp@feld.cvut.cz
http http://cs.felk.cvut.cz/~jislp/
irc kanßly #cs, #cz, #cesi; nick xpj


Zp∞t nahoru ]
Copyright © 1997, 1998 Pavel Jisl, jislp@feld.cvut.cz