Nefunkcni py-lxml
Miroslav Prýmek
m.prymek at gmail.com
Mon Sep 21 20:27:41 CEST 2009
On 21.9.2009, at 17:47, Dan Lukes wrote:
> 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.
>
Ok, uz jsem objevil opsnu -b - a kam se ten balik nahraje? Normalne
do /usr/ports/packages/...?
>
>> --> 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
>
Je to treba tady: http://www.freebsd.org/doc/en/books/handbook/anoncvs.html
Nejak jsem si nevimproc myslel, ze v tom cvsup je neco jinyho nez v
anoncvs...
>> 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).
> [...]
>
>> mi to nejak polopaticky priblizit
>
> Nekteri si mysli, ze prave tohle mi jde. Tak snad se to podarilo ...
Musim se pridat k nazoru, ze ti to fakt jde ;) - a dekuju za obsahly
vyklad.
Nicmene v tomhle jsme si nerozumeli - kdyz jsem psal "po kompilaci",
tak jsem tim myslel "kompilaci balicku"
- kompilaci, linkovani, ...., instalaci. Takze spravne otazka mela
znit "jaktoze se balicek bez problemu prelozi
a nainstaluje, kdyz mu chybi nejaky symbol v knihovne, kterou pouziva"
- a odpoved, ktera me napadla: protoze vysledkem, kterej
se instaluje neni spustitelna binarka, ale zase knihovna, u ktere to
proste "nevadi" (resp. nevadi to nikomu
krome uzivatele ;)
Jal jsem se to zkusit:
----------------------------------------- mylib.h
void myLibFunc();
----------------------------------------- mylib.c
#include <stdio.h>
#include "mylib.h"
void myLibFunc() {
printf("Hola hola hola!\n");
}
----------------------------------------- myapp.c
#include "mylib.h"
int main() {
myLibFunc();
}
----------------------------------------- Makefile
.PHONY: clean all
all: libmylib.so myapp
clean:
rm *.o *.so myapp 2>/dev/null || true
libmylib.so: mylib.c mylib.h
gcc -c mylib.c -o mylib.o
gcc -shared mylib.o -o libmylib.so
rm mylib.o # ciste proto, aby se mi tam nemotal
myapp: myapp.c mylib.h libmylib.so
gcc -c myapp.c -o myapp.o
gcc -L. -lmylib myapp.o -o myapp
-----------------------------------------
Kdyz ted vytvorim binarku, je vsechno v poradku:
# make all
gcc -c mylib.c -o mylib.o
gcc -shared mylib.o -o libmylib.so
rm mylib.o
gcc -c myapp.c -o myapp.o
gcc -L. -lmylib myapp.o -o myapp
# setenv LD_LIBRARY_PATH .
# ldd myapp
myapp:
libmylib.so => ./libmylib.so (0x2807d000)
libc.so.7 => /lib/libc.so.7 (0x2807f000)
# ./myapp
Hola hola hola!
Kdyz v mylib.c zmenim myLibFunc na myLibFuncX, tak to zhavaruje (coz
jsem prave cekal i u toho py-lxml):
#
make
[ret
: 0] [mprymek at kyrios.gosw.cz]
gcc -c mylib.c -o mylib.o
gcc -shared mylib.o -o libmylib.so
rm mylib.o
gcc -c myapp.c -o myapp.o
gcc -L. -lmylib myapp.o -o myapp
myapp.o(.text+0x12): In function `main':
: undefined reference to `myLibFunc'
*** Error code 1
No a me slo o to, ze nevim, jak vnitrne to linkovani presne funguje -
predpokladam,
ze .so objekt ma v sobe nejaky zaznam "potrebuju objekty libprvni.so.1
a libdruha.so.2"
a pak ma seznam nedefinovanych symbolu, kterej se ale resi az tehdy,
kdy se symbol skutecne
pouzije nebo co...
Pomoci ldd potom muzu zjistit, jestli jsou k dispozici vsechny tyhle
objekty, ale nezjistim, jestli
jsou k dispozici skutecne vsechny symboly, ktery jsou nedefinovany...
# ldd libmylib.so
libmylib.so:
libc.so.7 => /lib/libc.so.7 (0x28080000)
Jestli to dobre chapu, tak problem je v tom, ze jde udelat:
# gcc -shared myapp.o -o libmyapp.so
prestoze je tam ten nedefinovanej symbol myLibFunc (v knihovne je
myLibFuncX)
Porad nerozumim tomu, proc je mozny vytvorit knihovnu, ktera ma nejaky
nedefinovany
symboly, ktery nejsou v dobe jejiho prekladu k dispozici v zadne z
knihoven, ktery linkuje
- myslel jsem, ze se to hlida, a ze kdyz ldd ma vsechno "zaplneny",
tak nemuze
byt zadnej nedefinovanej symbol, coz jsem se teda spletl - v tom je
ten zakopanej pes...
Ale mozna to chapu nejak uplne blbe :)
M.
More information about the Users-l
mailing list