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] [mpry...@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.
--
FreeBSD mailing list (users-l@freebsd.cz)
http://www.freebsd.cz/listserv/listinfo/users-l