linux-l: Dynamic Loading at Run Time
Michael Wiedmann
mw at miwie.in-berlin.de
Di Feb 1 20:48:42 CET 2000
Jens Dreger (jens.dreger at physik.fu-berlin.de) wrote:
> Ach ja, und berichte mir doch bitte, was Du herausfindest ;-) Ich
> finde das naemlich auch _sehr_ interessant !!
Hier das versprochene Resume:
1) mit dlopen(...) versuchen die shared lib zu öffnen. Dabei am besten
auf den Mechanismus von ld.so.conf vertrauen und *keinen* absoluten
Pfadnamen zur Lib angeben, sondern lediglich den Dateinamen
(z.B. libxxx.so)
2) alle erforderlichen Symbole (i.d.R. Namen von zu rufenden Funktionen)
mit dlsym(...) auflösen und entsprechenden Variablen zuweisen
(Funktionspointer)
3) geht eine der obigen Aufrufe schief, steht die Funktionalität der
shared lib *nicht* zur Verfügung und die eigene Applikation muß
eben ohne diese auskommen -> disablen der entsprechenden
Menüeinträge o.ä.
4) ab jetzt können die entsprechenden Funktionen der shared lib über die
Funktionspointer gerufen werden (retval = (*funcPtr)(funcarg);
5) am Schluss noch dlclose(...) aufrufen, fertig
Der Hinweis von Harald auf ´gmodule´ aus der ´glib´ war insofern
hilfreich, dass klar wurde, dass es eben ausser dem o.g. Interface unter
anderen Unices (z.B. HP-UX) ein anderes Interface gibt (shl_*).
Soll/Muß die eigene Applikation portabel bleiben, muß dies
entsprechendes konditionales Inkludieren (oder kapseln via autoconf)
berücksichtigt werden.
Eine beispielhafte Implementierung funktionierte nach obigem Kochrezept
auf Anhieb sowohl unter Linux als auch unter Solaris.
Das wars
Michael
--
Looking for an X11 based PalmPilot Address Manager?
Have a look at http://www.in-berlin.de/User/miwie/pia/
Mehr Informationen über die Mailingliste linux-l