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

--
FreeBSD mailing list (users-l@freebsd.cz)
http://www.freebsd.cz/listserv/listinfo/users-l

Odpovedet emailem