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.hPlugin-Class-SRC: ( Die powerClass wird als globale Klasse definiert, denn diese managt die Kommunikation ----> Singletone )
powerclass.cpp
powerclass.h
drawobjects.cpp
drawobjects.hIch 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}")