Symbole in dynamischen Librarys: Schon [solved]



  • Abend,

    Ich hab grad ein kleines (oder auch großes) Problem mit dynamischen Librarys.
    Ich beschreib die Situation mal kurz:

    Ich hab 2 C-Dateien die zu Objektdateien kompiliert werden dann
    zusammengelinkt werden zu einer dynamischen Library (ich hoffe das
    wird soweit klar, wenn nicht bitte nachfragen 🙂 )

    Diese dynamische Library wird nun wiederum von einem Programm aus geladen,
    dieses braucht zum Einstieg das Symbol "getCompPluginInfo"
    (wie genau das im Programm abläuft weis ich auch nicht, ich denke jedoch es wird
    über dlsym geladen).

    Doch nun erhalte ich eine Fehlermeldung folgender Art:
    dlsym: /home/storm/.beryl/plugins/libweather.so: undefined symbol: getCompPluginInfo

    Die Funktion getCompPluginInfo wird jedoch in einer der C-Dateien definiert

    CompPluginVTable *getCompPluginInfo(void)
    {
        return &weatherVTable;
    }
    

    Und solange man nur diese eine zu einer dynamischen Library macht funktioniert
    das ganze. Linkt man aber beide Objektdateien zu einer dynamischen Library so gibt es
    den besagten Fehler. (Ich weis das kann man sich jetzt schlecht vorstellen)

    Nun zu meiner Vermutung: Durch das zusammenfügen der beiden Objektdateien geht
    das Symbol verloren. Doch wie kann ich das verhindern?

    Ich danke schonmal jedem der sich überhaupt die Mühe gemacht hat das alles
    durchzulesen.

    Achja kompilieren tu ich natürlich mit dem gcc, vll gibts ja auch hier
    einen speziellen Linkerflag um symbole zu exportieren oder ähnliches.



  • Mal wieder typisch 2h versucht/gesucht ohne Erfolg
    und kaum gepostet hat man die Lösung:

    gcc bla -u getCompPluginInfo

    Ist die benötigte Funktion, nur fals jemand mal ein ähnliches Problem hat.


Anmelden zum Antworten