2014-05-03 4 views
0

pour le moment J'essaie de créer une bibliothèque partagée en utilisant kde4_add_library. En fait ce n'est pas grave si c'est add_library ou kde4_add_library mais il semble que add_library n'a aucun sens puisqu'il ne peut pas gérer les classes avec des macros "Q_OBJECT"/fichiers moc?! Malheureusement, la compilation dit "référence indéfinie" pour de nombreuses méthodes des classes de bibliothèques partagées dans les sous-répertoires qui sont liés à la cible lib de kde4. Les messages d'erreur ressemblent:CMake: référence non définie lors de la liaison de bibliothèques à KDE4 lib

./wc3lib/src/editor/editor.cpp:71: undefined reference to `wc3lib::editor::BlpCodec::startup()' 

Pour trouver les paquets que j'utiliser les macros suivantes:

if (EDITOR) 
    find_package(Qt4 COMPONENTS QtCore QtGui REQUIRED) 
elseif (PLUGINS) 
    find_package(Qt4 COMPONENTS QtCore QtGui) 
endif() 

if (${QT4_FOUND}) 
    include(${QT_USE_FILE}) 
    add_definitions(${QT_DEFINITIONS}) 
    include_directories(${QT_INCLUDE_DIR}) 
endif() 

if (EDITOR) 
    find_package(KDE4 REQUIRED) 
elseif (PLUGINS) 
    find_package(KDE4) # only for MPQ plugins 
endif() 

if (${KDE4_FOUND}) 
    include(KDE4Defaults) 
    add_definitions(${KDE4_DEFINITIONS}) 
    include_directories(${KDE4_INCLUDE_DIR} ${KDE4_INCLUDES}) 
    link_directories(${KDE4_LIB_DIR}) 
endif() 

    find_package(OGRE COMPONENTS Paging Terrain REQUIRED) 

if (${OGRE_FOUND}) 
    include_directories(${OGRE_INCLUDE_DIRS}) 
    link_directories(${OGRE_LIB_DIR}) 
endif() 

les sous-répertoires sont ajoutés après:

if (BLP AND ${OGRE_FOUND}) 
add_subdirectory(Plugin_BlpCodec) 
endif() 
if (MPQ AND ${KDE4_FOUND}) 
add_subdirectory(kio_mpq) 
endif() 
if (BLP AND ${QT4_FOUND}) 
add_subdirectory(qblp) 
endif() 

ils contiennent des cibles sans toutes les macros KDE:

add_library(Plugin_BlpCodec SHARED ${wc3lib_EDITOR_PLUGIN_BLPCODEC_SRC}) 
target_link_libraries(Plugin_BlpCodec wc3libblp ${Boost_LIBRARIES} ${OGRE_LIBRARIES} ${GETTEXT_LIBRARIES}) 

enfin dans le répertoire parent la cible KDE est créé:

kde4_add_library(wc3libeditor SHARED ${wc3lib_EDITOR_SRC} ${wc3lib_EDITOR_UI_H}) 
target_link_libraries(wc3libeditor ${wc3lib_CORE_LIBRARIES} ${GETTEXT_LIBRARIES} ${Boost_LIBRARIES} ${OGRE_LIBRARIES} ${QT_LIBRARIES} ${KDE4_KIO_LIBS} ${KDE4_KUTILS_LIBS} ${KDE4_KPARTS_LIBS} Plugin_BlpCodec qblp) 

les options CMake comme "éditeur" sont tous activés. Pour une bibliothèque liée « qblp » J'utilise des trucs Qt:

add_definitions(${QT_DEFINITIONS}) 
add_definitions(-DQT_PLUGIN) 
add_definitions(-DQT_SHARED) 

l'autre utilise simplement « add_library » et lui-même a aussi libs système liés contre elle. Aucune de ces dépendances ne peut être compilée. Les méthodes sont toutes définies. J'utilise

cmake_minimum_required(VERSION 2.8.4) 

kdelibs-4.11.5 QtCore-4.8.5-r1

ce n'est pas la première fois que j'ai des problèmes avec Qt/KDE via CMake. Toute aide jusqu'à présent?

modifier: Notez que "Target "wc3libeditor" a une propriété qui INTERFACE_LINK_LIBRARIES se distingue de ses propriétés LINK_INTERFACE_LIBRARIES." apparaît pour la cible wc3libeditor. Est-ce lié aux problèmes de liaison?

+0

Il est une question assez longue. Pouvez-vous l'attribuer à un problème unique et simple? – lpapp

+0

Également, affiche './wc3lib/src/editor/editor.cpp: 71'. – lpapp

Répondre

1

Le problème semble être que

find_package(KDE4 REQUIRED) 

ajoute divers indicateurs de C++. Vous pouvez trouver tout cela dans /usr/share/apps/cmake/modules/FindKDE4Internal.cmake Certains de ces drapeaux conduisent aux erreurs de référence non définies. Une solution simple pourrait être ajouter

set(CMAKE_CXX_FLAGS "") 

après la déclaration find_package qui est un peu laid.

Plus d'informations peuvent être trouvées ici: http://lists.kde.org/?l=kde-buildsystem&m=132906487119016

et il y a une meilleure solution en utilisant la macro d'exportation: https://forum.kde.org/viewtopic.php?f=64&t=89265

Une autre solution pourrait être l'utilisation de cadres de KDE (5) à la place.

J'ai aussi créé un rapport de bogue: https://bugs.kde.org/show_bug.cgi?id=338151

Questions connexes