[so] [Tema 3] Functii callback

adrian nistor adriannistorrr at yahoo.com
Sat Dec 2 19:06:54 EET 2006



Mircea Bardac <cs at mircea.bardac.net> wrote: 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
   
 La linkarea pentru LibMonitor.so, linkezi si _test/ControlMonitor.o (cu g++).  Va genera  automat  si .o-ul. 
 Din ce spui tu inteleg ca ai incercat efectiv acest lucru si 
 nu merge?
 

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 adevarat. Totusi, nu trebuie neaparat sa incluzi .h-urile
 date. Poti sa iti faci propriile .h-uri (cu extern C).

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
_______________________________________________
so mailing list
so at cursuri.cs.pub.ro
http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/so


 
---------------------------------
Access over 1 million songs - Yahoo! Music Unlimited.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://cursuri.cs.pub.ro/pipermail/so/attachments/20061202/1de23535/attachment-0001.html


More information about the so mailing list