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...


Anmelden zum Antworten