[so] [Tema 3] Functii callback
Mircea Bardac
cs at mircea.bardac.net
Sat Dec 2 18:10:13 EET 2006
Salut,
OS: Linux
Disclaimer: I might be missing something
(ma voi referi doar la LibMonitor, nu la LibRW)
Din ce au compilat altii, nu prea mi-am dat seama cum au rezolvat problema
aceasta. Din ce a compilat tavi, am presupus ca a incarcat dinamic (-ldl)
something unde sunt implementate functiile de control.
Reasoning path:
1. biblioteca noastra trebuie sa apeleze functiile definite in
CallbackMonitor.h.
2. ca sa le poata apela, trebuie ca acestea sa fie definite undeva, descopar
ca sunt definite in _test/ControlMonitor.c.
3. in aceste conditii, daca nu includ manual acest fisier in sursele mele, eu
trebuie sa pot link-a _test/ControlMonitor.o in biblioteca mea atunci cand
apelez (folosesc C++): g++ -shared (lista fisiere obiect compilate
cu -fPIC) -o LibMonitor.so
4. Urmaring modul de utilizare al lui Makefile.checker (+ continutul lui) din
http://cs.pub.ro/~so/index.php?section=Teme&file=Tema%203#Testare
descopar ca _test/ControlMonitor.o (si _test/ControlRW.o) sunt create DUPA ce
biblioteca mea se link-editeaza => on a clean run (=no .o files around),
linking-ul meu cu respectivul fisier obiect nu va merge. Solutie: cele 2
fisiere obiect pentru control ar trebui mutate in target-ul build-pre <==
PROBLEMA NR. 1
6. Chiar si asa, programul meu compilat cu g++-ul, nu se poate folosi de
definitiile din CallbackMonitor.h deoarece simpla includere a acestora va
rezulta in aparitia unor simboluri mangle-uite la nume, ca asa face C++-ul =>
nu se va link-edita cu fisierul obiect compilat cu gcc-ul
_test/ControlMonitor.o. Solutia a fost utilizarea in CallbackMonitor.h a:
// header inclusion check
#ifdef __cplusplus
extern "C" {
#endif
// definitions
#ifdef __cplusplus
}
#endif
Probabil, acelasi lucru trebuie facut si in CallbackRW.h - nu am ajuns inca in
respectivul punct.
Este corect ce am spus eu mai sus... sau imi scapa ceva?
Ce alte solutii/implementari a mai gasit lumea?
Numai bine,
Mircea
--
Dream as if you'll live forever. Live as if you'll die today.
http://mircea.bardac.net
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
Url : http://cursuri.cs.pub.ro/pipermail/so/attachments/20061202/b2fa13b1/attachment.pgp
More information about the so
mailing list