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