undefined symbol



  • Hallo.
    Ich bin dabei ein Programm zu schreiben, welches bestimmte Module (*.so) dynamisch zur Laufzeit mittels dlfcn.h (also dlopen, etc.) lädt und deren Funktionen ausführt.
    Das klappt soweit auch recht gut, nur bei einem der Module erhalte ich beim Ausführen die Fehlermeldung:

    Error during dlopen(): ./libA.so
    Error: ./libA.so: undefined symbol: _ZN6ForestD1Ev

    (btw: zum testen werden die Module mit RTLD_NOW geladen)

    Es gibt eine Klasse Forest, die aber eigentlich eingebaut werden sollte...
    Hier der entsprechende Makefile-Auszug:
    $(CC) $(CFLAGS) -fpic -c $(PATH)/A.cpp -o (PATH)/A.o(PATH)/A.o (CC) $(CFLAGS) -fpic -c $(PATH)/AData.cpp -o (PATH)/AData.o(PATH)/AData.o (CC) $(CFLAGS) -fpic -c $(PATH)/Tree/Forest.cpp -o (PATH)/Tree/Forest.o(PATH)/Tree/Forest.o (CC) $(CFLAGS) -fpic -c $(PATH)/Tree/Tree.cpp -o (PATH)/Tree/Tree.o(PATH)/Tree/Tree.o (CC) $(CFLAGS) -fpic -c $(PATH)/Tree/Branch.cpp -o (PATH)/Tree/Branch.o(PATH)/Tree/Branch.o (CC) $(CFLAGS) -fpic -c $(PATH)/Tree/Leaf.cpp -o (PATH)/Tree/Leaf.o(PATH)/Tree/Leaf.o (CC) -shared -fpic $(PATH)/Tree/Branch.o $(PATH)/Tree/Leaf.o $(PATH)/Tree/Tree.o $(PATH)/Tree/Forest.o $(PATH)/Candidate.o $(PATH)/AData.o $(PATH)/A.o -o $(PATH)/libA.so

    Hab ich was falsch gemacht oder was vergessen? Hat jemand einen Tip?

    bye



  • countless schrieb:

    Hab ich was falsch gemacht oder was vergessen? Hat jemand einen Tip?

    Falsch gemacht: Vermutlich die falsche Library angegeben (die Fehlermeldung besagt, daß er die Funktion "_ZN6ForestD1Ev" nicht gefunden hat - keine Ahnung, wie die undekoriert heißt).

    Vergessen: Etwas Quellcode

    Tip: Frag mal im Linux-Board nach 😉



  • Etwas Schützenhilfe 😉

    $ c++filt _ZN6ForestD1Ev
    Forest::~Forest()
     $
    

    Könnte also sein dass die Impl vom dtor fehlt.



  • Danke für die Antworten!
    Ich hatte wirklich die Impl vom Destruktor vergessen... Asche über mein Haupt 😉
    "c++filt" kannte ich noch nicht... danke für den Tip!
    bye


Log in to reply