linux-l: Dynamic Loading at Run Time

Harald Boehme boehme at informatik.hu-berlin.de
Mo Jan 24 14:08:24 CET 2000


Hi

> > man dlopen kennst Du schon ?
> > 
> > Ansonsten nach Applikationen Ausschau halten, die in irgendeiner Form
> > "plugins" unterstuetzen. Sowas ist haeufig mittels "dynamics loading"
> > implementiert.

Wie hier schon erwähnt ist die Grundlage dafür natürlich die LIb dl.

Es gibt dafür auch frame-works die einem das Arbeiten damit vereinfachen.
Dabie ist insbesondere gmodule ais der glib (GNOME) zu nennen. Einsatzfälle
für gmodule findet man in allen grösseren GNOME-Applikatione wie z.B.
gnumeric.

Vor einiger zeit wurde auch ein C++ Framework announced, da weiss ich aber
nicht mehr wie es heisst, aber es sollte eigentlich unter www.freshmeat.net
zu finden sein.

> Ich möchte die Sache noch etwas "verkomplizieren" und das Ganze
> ausweiten auf die Frage, wie ich das mit Shared Libs mache, 
> die mit C++ geschrieben sind!
> 
> Es kann davon ausgegangen werden, dass sowohl meine Applikation als auch
> die Shared Lib mit dem gleichen C++-Compiler erstellt werden - Probleme
> mit dem Name Mangling treten also zum Glück nicht auf.

Ja ohne diese Einhscränkungen wird es sonst sehr kompilziert.


Also unter C++ sind dann folgende Sachen zu beachten. Die Funktionalität, die
von dem dynamischen Module bereitgestellt wird sollte als Schnittstelle in
einer abstrakten Basisklasse defineirt sein bzw. mehreren Basisklassen.
Ausserdem sollte das Modul als "factory" fungieren, d.h. es gibt eine Stelle,
die einem die entsprechen Objecte erzeugt (Pattern). Dazu ist im Fall eines
dynamischen Modules eine global C++-Funktion am besten geeignet, die mit
extern "C" { ... } mit der C-Namenskonfention ausgestattet wird. Dann kann
man sie einfach wie jede andere C-Funktion rufen hatt dann eine Object, das
von eienr bekannten Basisklasse abgeleit worden  ist und kann ganz normal
unter C++ damit arbeiten.

MvG
		Harald

-- 
       <<<<              Harald Böhme, Berlin 10115          >>>>
      <<<<         Schöhnholzer Str. 19                     >>>>
     <<<<     boehme at informatik.hu-berlin.de                >>>>



Mehr Informationen über die Mailingliste linux-l