Nefunkcni py-lxml
Dan Lukes
dan at obluda.cz
Mon Sep 21 17:47:13 CEST 2009
On 21.9.2009 16:23, Miroslav Prýmek:
> --> Vsiml jsem si, ze portupgrade vypisuje "Backing up the old version",
> ale nejak netusim, kde ji najit...
Nikde, pokud sis neobjednal, aby se porizena zaloha zachovala. bez toho
existuje pouze po dobu update, kvuli tomu, aby bylo mozen se pri
neuspesen instalaci nove verze vratit ke stare. Po uspesne instalaci je
zaloha zrusena.
> --> Jedinej anoncvs server, ke kterymu se mi podarilo pripojit, byl
> anoncvs.tw.FreeBSD.org, coz neni
> Jakej teda pouzit priste nejblizsi server?
Jmena v tomhle formatu mi nic nerikaji (coz neznamena, ze nekde v
nejakem navodu nejsou takhle uvedena). Ja pouzivam
cvsup.ZEME.freebsd.org kde ZEME=cs
> Me porad nejde do hlavy, jak muze PO KOMPILACI byt nejakej nedefinovanej
> symbol. Vzdyt to by ta kompilace mela
> zhavarovat, ne?
Aha. Ty nevis, co je kompilace. Nebo, prinejmensim, nerozlisujes
kompilaci (preklad) a linkovani (sestaveni).
Tak kompilace, to je prevod zdrojoveho kodu do jazyka konkretniho
procesoru. Vznikne "objekt" (odtud obvykla pripona ".o"). Objekt
neobsahuje kod, ktery nebyl v puvodnim zdrojovem kodu. Takze, kdyz v
puvodnim kodu volas funkci, rekneme, strcmp(), ale tuhle funkci jsi sam
v ramci toho kodu nenapsal (coz je bezny pripad) tak funkci strcmp
nemuze obsahovat ani vysledny objekt. Ale obsahuje informaci, ze tato
funkce ma byt zavolana (protoze tak to bylo i v puvodnim zdrojovem kodu).
Podobnych objektu muzes napsat desitky. Kazdy bude nejake symboly
definovat (globalni promenne, funkce a tak) a na jine, ktere sam
neobsahuje, se bude odvolavat.
Objekt sam ale nejde spustit. Do spustitelneho programu je treba objekty
sestavit (slinkovat). Slinkovani - to je spojeni nekolika objektu a
jejich vzajemne propojeni - prave tak, aby symbol, ktery jeden z objektu
vyzaduje, byl "dodan" objektem jinym. Tak vznikne spustitelny program.
Pokud by ve fazi sestavovani zustal nejaky symbol neuspokojen (objekt ho
potrebuje, ale zadny jiny objekt ho "nedodava") pak se sestaveni nepovedlo.
To uz ale hezkou chvili mluvim o sestavovani. Kompilace z tohoto titulu
neselze. Ta vyzaduje pouze to, aby vsechny symboly byly deklarovany.
To jsou mozna ta spravan slova, ktera ti to vysvetli - kompilaci
zajimaji deklarace. Linkovani zajima implementace.
Knihovna, at uz staticka nebo dynamicka, to je "hromadka objektu". Ciste
z praktickych duvodu - aby se nemuselo neustale operovat s desitkami
objektu - bylo by to nepohodlne. Pri sestavovani tak muzes uvest nejen
jednotlive objekty, ale celou knihovnu - je to totez, jako bys
vyjmenoval vsechny ty jednotlive opbjekty, ktere v ni jsou.
Jak uz jsem rikal - pro kompilaci objektu neni podstatna implementace
ale pouze deklarace symbolu. Pokud je knihovna pouha hromadka objektu,
tak je jasne, ze pro ni plati totez.
Symbol xsltProcessOneNode byl nekde deklarovan (nevim, zda v include
souborech pochazejicich z xslt baliku, nebo zda si ho deklaroval sam
zdrojovy kod lxml) - proto se povedla kompilace objektu. Symbol ale
nebyl v ramci zdrojoveho kodu "implementovan" a v objektu vzniklem z
tohoto konkretniho zdrojaku se tak jednalo o symbol externi (takovy,
ktery "doda" nekdo jiny).
Pri sestavovani (linkovani) ale nebyl tento symbol v zadnem z dodanych
objektu nalezen a zustal nevyreseny. Nebylo tudiz mozne sestavit funkcni
spustitelny program - a to je to, co jsi videl.
Mimochodem, tohle cele co jsem popsal neni specificka zalezitost jazyka
C ani OS FreeBSD. Takhle funguje vetsina kompilatoru programovacich
jazyku na prakticky vsech OS. Lze tak dokonce sestavovat program z
objektu, ktere vytvorily ruzne kompilatory ze zdrojovych kodu ruznych
programovacich jazyku a to dokonce i na ruznych OS.
Ze je gcc v nekterych (zejmena trivialnich) pripadech ochotno provest
oba kroky (preklad i sestaveni) v jednom behu na "dvojtaktnosti" procesu
nic nemeni. To, co se jmenuje 'gcc' stejne neni ve skutecnosti
kompilator, ale "wrapper" - ten na zaklade parametru zjistit co se
vlastne bude delat a podle toho zavola co je treba - skutecny
kompilator, linker, ...
> mi to nejak polopaticky priblizit
Nekteri si mysli, ze prave tohle mi jde. Tak snad se to podarilo ...
Dan
More information about the Users-l
mailing list