undefined symbol bei shared library und cmake + qibuild



  • Hallo zusammen,

    ich habe folgende CmakeLists.txt:

    [...]
    
    # Define the name of the project
    project(videomodule)
    
    # This include enable you to use qibuild framework
    find_package(qibuild)
    
    # Create a list of source files
    set(_srcs
      ../MediaModule.h
      ../MediaModule.cpp
      VideoModule.cpp
      VideoModule.h
      main.cpp
    )
    
    qi_create_lib(videomodule SHARED ${_srcs} SUBFOLDER naoqi)
    qi_use_lib(videomodule ALCOMMON ALPROXIES ALAUDIO ALVISION JPEG)
    

    Es wird also eine shared library compiliert, in diesem Fall cross-compiled damit dieses Modul auf einem Roboter lauffähig ist. Das funktioniert auch alles einwandfrei. Allerdings bekomme ich zur Laufzeit eine Fehlermeldung von dlopen():

    dlopen failed with /var/persistent/home/nao/mymodules/lib/naoqi/libvideomodule.so: undefined symbol: _ZTI11MediaModule
    

    Dieser Fehler tritt erst auf, seitdem ich die Klasse MediaModule hinzugefügt habe, vorher ging alles. Die Klasse VideoModule erbt von MediaModule (falls das relevant sein könnte).

    Ich weiß wirklich nicht wie es zu diesem Fehler kommen kann, es wird doch sowieso alles zusammen compiliert und gelinkt? Weiß jemand Rat?



  • Anscheinend benutzt MediaModule noch eine externe Lib. Schau mal in MediaModule.h bzw. MediaModule.cpp, ob dort weitere Headerdateien eingebunden werden (welche evtl. einen Hinweis auf die hinzu zu linkenden Libs geben).



  • Danke für den Tipp mir die MediaModule Klasse nochmal genau anzuschauen. Der virtuelle Destruktor war zwar deklariert, aber nicht definiert.
    Jetzt geht es.

    Aber mal ehrlich: Kann man da nicht auch aussagenkräftigere Fehlermeldungen geben? 😕 Wobei ich nochmal schauen sollte welches Warnlevel ich beim Compiler eingetragen hab vielleicht liegt da der Hase im Pfeffer.


Log in to reply