[solved] Symbol lookup error



  • Der Code ist ein "wenig" complex, ich versuch später noch was minimales compilierbares zu stricken. Hier erstmal die verworrene Struktur (Inkludeguards/includes removed):

    class Base { 
    public:   
        Base() : irgendwas(5) {}
    
    protected:
        int irgendwas;
    };
    
    class Abstruse : public Base { 
    public:
        Abstruse() : Base(), wasAnderes(7) {}
    
        virtual void setWasAnderes() = 0;
        int getWasAnderes();
    
    protected:     
        int wasAnderes;
    };
    
    class Spezi : public Abstruse {
    public:
        Spezi() : Abstruse() {}
        void setWasAnderes() { /* spezifische Methode zur Datenaquise */  wasAnderes = 42; }
    };
    

    In einer seperaten pluginin-lib PlugIt nutze ich Spezi , in einer Methode greife ich über den geerbten Abstruse::getWasAnderes() zu und erhalte dabei ein "undefined symbol: _ZNK12ModalityBase16captureFrequencyEv"

    class Spezi;
    
    class PlugIt
    {
    public:
        PlugiIt (Spezi * s) : spezi(s) {};
    
        void export();
    private:
        Spezi * spezi;
    };
    
    #include "base.h"
    #include "abstruse.h"
    #include "spezi.h"
    #include <iostream>
    
    void PlugIt::export() { std::cout << spezi->getWasAnderes(); }
    

    nm liefert: U _ZNK12ModalityBase16captureFrequencyEv für den Zugriff also isst das wohl wirklich nicht da. Jemand eine Idee wie ich es da rein bekomme - muss ich beim linken der lib zusätzliche gegen die Objektdateien von Base und Abstruse linken oder krieg ich dann doppelt definierte Fehler?

    Edith: Hab das ganze (Datenbankzugriff, Wrapping auf Klassen) jetzt librarisiert und die wo nötig includiert, jetzt tuts. Hätte ich vielleicht auch schneller drauf kommen können...


Anmelden zum Antworten