CMake und Bibliotheken erstellen



  • Hallo,

    ich bin gerade dabei ein PlugIn für X-Plane Flugsim zu schreiben.
    Dieses kommuniziert mit "Robot operating System" und ist Teil eines größeren Projekts.
    Das Plugin ist eine Art DLL mit der Endung *.xpl. Wie ihr seht, baut sich das Unterprojekt durch:

    Plugin-SRC: ( Main mit dazugehöriger Header file)
    drawxmain.cpp
    drawxmain.h

    Plugin-Class-SRC: ( Die powerClass wird als globale Klasse definiert, denn diese managt die Kommunikation ----> Singletone )
    powerclass.cpp
    powerclass.h
    drawobjects.cpp
    drawobjects.h

    Ich muss das erste mal CMake nutzen und bin komplett überfordert. Hier ist mein 25. Versuch..:
    Die .xpl wird gebaut und beim Start des Plugins in Xplane steht in der Log.txt:

    dlerror:/opt/X-Plane/Resources/plugins/Plugin.xpl: undefined symbol: _ZTVN4Draw7Objects7CSensorE
    Failed: /opt/X-Plane/Resources/plugins/Plugin.xpl. (This file is missing, not a DLL or could not be loaded due to another missing DLL.)

    Weiß jmd einen Tipp oder mache ich grundsätzlich was falsch?

    SYSTEM: Ubuntu 16.04 mit entsprechender g++, gcc Libraries und cmake ist 3.xx

    ##################################################
    # States that CMake required version must be .gt. 2.6
    cmake_minimum_required(VERSION 3.0.2)
    set(MODULE_NAME XPlug)
    message("${MODULE_NAME}")
    ##########################################################################
    # Compiler Flags
    ##########################################################################
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DXPLM200=1 -DXPLM210=1")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DAPL=0 -DIBM=0 -DLIN=1")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DCHECK_RESULT_USED=\"__attribute__ ((warn_unused_result))\"")
    set(XPLANE_LINKER_FLAGS "-rdynamic -nodefaultlibs -undefined_warning -fPIC -fvisibility=hidden")
    ##########################################################################
    #  X-Plane SDK
    ##########################################################################
    set(XPLANE_ROOT_DIR "/opt/X-Plane")
    set(XPLANE_SDK_DIR "${XPLANE_ROOT_DIR}/SDK/CHeaders/")
    set(XPLANE_PLUGIN_DIR "${XPLANE_ROOT_DIR}/Resources/plugins")
    set(EXECUTABLES_PATH "${PRO_HOME}/07_Executables")
    # Module headers and library
    set(SRC drawxmain.cpp drawobjects.cpp  powerclass.cpp)
    set(HDR drawxmain.h drawobjects.h  powerclass.h)
    set(LIBS Mathematics EnumParser ParameterServer ) # muss hier roscpp rein?
    set(DEPS ParameterServer_shared EnumParser_shared Mathematics_shared )
    
    SET(ALL_SRC ${SRC} ${HDR})
    LIST(SORT ALL_SRC)
    
    add_library(plugin ${ALL_SRC})
    include_directories(${roscpp_INCLUDE_DIRS})
    include_directories(SYSTEM "${XPLANE_SDK_DIR}/XPLM/"  "${XPLANE_SDK_DIR}/Widgets/" "${XPLANE_SDK_DIR}/Wrappers")
    include_directories(SYSTEM ${Boost_INCLUDE_DIRS} ) # Weiß nicht ob ich es brauche
    target_link_libraries(plugin ${Boost_LIBRARIES} ${LIBS} ${roscpp_LIBRARIES})
    add_dependencies     (plugin ${DEPS})
    #link_libraries(m)
    
    SET_TARGET_PROPERTIES(plugin PROPERTIES PREFIX "")
    SET_TARGET_PROPERTIES(plugin PROPERTIES SUFFIX "")
    
    set(PLUGIN_OUTPUT_FILENAME "PlugIn.xpl")
    SET_TARGET_PROPERTIES(plugin PROPERTIES LINK_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -rdynamic -nodefaultlibs -undefined_warning -fPIC -fvisibility=hidden")
    
    set_target_properties(plugin PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${XPLANE_PLUGIN_DIR})
    
    set_target_properties(plugin PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${XPLANE_PLUGIN_DIR} )
    set_target_properties(plugin PROPERTIES OUTPUT_NAME "${PLUGIN_OUTPUT_FILENAME}")
    

Log in to reply