|
| Shared objects Fra : Klaus Petersen |
Dato : 06-06-04 18:09 |
|
Hej.
Jeg er ved at udvikle et shared object til linux, der skal wrappe nogle
funktioner fra et andet shared object.
Måden jeg gør det på p.t. er ved at lade den eksekverbare fil være afhængig
af objekterne.
dvs. jeg har en linje i min makefile der ligner:
g++ -Wall -g -s -o minso.so main.o andenso.so
Da det ene shared object skal wrappe nogle funktioner fra det andet shared
object, er der jo nogle funktioner, der får samme navn - og det giver g++
mig en "multiple definition of ...." fejl på.
- ikke så mærkeligt.
Men hvordan kan man wrappe funktioner på denne her måde?
Er der en måde at "importere" funktioner fra et shared object under andre
navne, således de ikke konflikter?
Jeg har ikke sourcekoden til det shared object, som har funktionerne jeg
prøver at wrappe.
mvh.
Klaus.
| |
Jesper Toft (06-06-2004)
| Kommentar Fra : Jesper Toft |
Dato : 06-06-04 20:47 |
|
Klaus Petersen wrote:
> Er der en måde at "importere" funktioner fra et shared object under andre
> navne, således de ikke konflikter?
Det burde kunne lade sig gøre ved at åbne .so filen selv. Der er et godt
eksempel i dlopen(3), hvor cos() hives ud af libm.so.
--
/Jesper
| |
snog (14-06-2004)
| Kommentar Fra : snog |
Dato : 14-06-04 12:19 |
|
Klaus Petersen wrote:
> Er der en måde at "importere" funktioner fra et shared object under andre
> navne, således de ikke konflikter?
Kan du ikke lave et namespace til dine funktioner?
mvh
| |
Klaus Petersen (15-06-2004)
| Kommentar Fra : Klaus Petersen |
Dato : 15-06-04 11:24 |
|
> Kan du ikke lave et namespace til dine funktioner?
Det ved jeg ikke, men jeg har fundet en acceptabel løsning.
Det viser sig at jeg altid får den samme instans (eller handle om man vil)
af objektet via. dlopen - og dermed kan jeg manuelt kalde den overload'ede
funktion.
Det er muligt at det kun kan lader sig gøre via. shared objects - jeg gad
godt vide hvorvidt LoadModule fra Win32 API vil returnere samme handle hvis
du loader samme dll flere gange.
Uanset hvad er det, ganske enkelt, genialt implementeret (mht. dlopen).
| |
|
|