dlopen
-
Ich hätte gerne eine Art Plugin-Funktion für ein Programm.
Es soll am Schluss verschiedene Dateiformate unterstützen, die ich nicht alle vorher kenne.Nun habe ich ein Problem:
// externe lib, die ein file-format beinhaltet LIBRARY (gegeben) -> Datentyp beinhaltet beispielsweise XGD* readFile(filename); // XGD ist ein Typ der die Inhalte der Datei speichert //Mein Programm benötigt nun einen Datentyp class Atom; // Eine XGD-Datei beinhaltet Atome, die noch ein bisschen mehr speichern als ich benötige, deswegen möchte ich eine Wrapperbibliothek bauen class XGDAtom: Atom; // Nun möchte ich dass mein Programm anhand der Dateiendung weiß, dass es einen XGD-Wrapper braucht // und den automatisch mit dlopen lädt dlopen(XGDWrap.so) ... // soweit ist alles klar // jetzt kommt das Problem: // der Wrapper benötigt eventuell auch eine Bibliothek // im Wrapper: #include <wichtige_xgd_library> // die externe lib vom anfang // wie kann ich die externe nun mitlinken? // ich kann vorher ja nicht wissen, ob das XGD-Format unterstützt werden soll // und dynamisch laden kann ich die Bibliothek ja auch nicht, oder?
-
ich versuche es nochmal ein wenig zu verdeutlichen:
// so könnte es aussehen ohne plugin architektur g++ -lwichtige_lib -lmeinwrapper meinprogramm.cpp
Nun ist es aber so dass ich die Klassen aus libmeinwrapper dynamisch laden möchte.
Das heißt aber für mich dass das Programm so gebaut würde// ich weiß nichts von externen bibliotheken g++ meinprogramm.cpp
In meinem Programm kann ich dann meinwrapper.so dynamisch laden. meinwrapper benötigt aber wichtige_lib um zu funktionieren.
Mir fällt grade nur ein, dass ich beim erstellen von meinwrapper die wichtige_lib statisch hinzulinke.
Aber statisch linken ist halt so ne sache...