'undefined reference to' avec cmake
Donc, je suis en train d'écrire une applet pour l'école, et cela nécessite l'utilisation de cmake. J'ai deux différentes classes contenues dans les dossiers qui leur sont propres, et je les utiliser dans le cadre de la classe principale. J'ai inclus dans leurs têtes comme tel dans le projet principal de l'en-tête:
#include /path/to/header/1.h
#include /path/to/header/2.h
Le problème que j'ai c'est que quand je lance le faire après que j'ai lancer cmake, je reçois pas défini d'erreurs de référence pour toute instance dans laquelle j'essaie d'utiliser l'une des deux bibliothèques. Je sais que cela a à faire avec l'éditeur de liens erreurs, mais depuis que je suis nouveau à cmake, je ne suis pas exactement sûr de ce que la bonne façon d'utiliser TARGET_LINK_LIBRARIES serait.
MODIFIER
Après la liaison/d'associer mes bibliothèques, j'ai le texte suivant:
CMakeLists.txt:
# A name for the project
project(plasma-engine-gdrive)
# Find the required libaries
find_package(KDE4 REQUIRED)
include(KDE4Defaults)
add_definitions (${QT_DEFINITIONS} ${KDE4_DEFINITIONS}, -std=c++0x)
include_directories(
${CMAKE_SOURCE_DIR}
${CMAKE_BINARY_DIR}
${KDE4_INCLUDES}
./include
./lib
)
set (GOOGLE_LIBS include/atom_helper.h include/util/string_utils.h include/client/doc_list_service.h include/client/service.h)
set (GOOGLE_SRCS include/atom_helper.cc include/util/string_utils.cc include/client/doc_list_service.cc include/client/service.cc)
# We add our source code here
set(gdrive_engine_SRCS gdriveengine.cpp)
add_library (DataWrapper include/DataWrapper.cpp include/DataWrapper.h)
add_library (GData ${GOOGLE_SRCS} ${GOOGLE_LIBS})
# Now make sure all files get to the right place
kde4_add_plugin(plasma_engine_gdrive ${gdrive_engine_SRCS})
target_link_libraries(plasma_engine_gdrive
GData
DataWrapper
${KDE4_KDECORE_LIBS}
${KDE4_PLASMA_LIBS})
install(TARGETS plasma_engine_gdrive
DESTINATION ${PLUGIN_INSTALL_DIR})
install(FILES plasma-engine-gdrive.desktop
DESTINATION ${SERVICES_INSTALL_DIR})
Il y a aussi trop d'erreurs pour les mettre ici. Voici quelques-uns:
/usr/include/c++/4.6/bits/stl_map.h:467: undefined reference to `Glib::ustring::ustring()'
lib/libGData.a(atom_helper.o): In function `pair<Glib::ustring, Glib::ustring, void>':
/usr/include/c++/4.6/bits/stl_pair.h:132: undefined reference to `Glib::ustring::ustring(Glib::ustring const&)'
/usr/include/c++/4.6/bits/stl_pair.h:132: undefined reference to `Glib::ustring::ustring(Glib::ustring const&)'
lib/libGData.a(atom_helper.o): In function `pair<Glib::ustring, Glib::ustring>':
/usr/include/c++/4.6/bits/stl_pair.h:137: undefined reference to `Glib::ustring::ustring(Glib::ustring const&)'
/usr/include/c++/4.6/bits/stl_pair.h:137: undefined reference to `Glib::ustring::ustring(Glib::ustring const&)'
#include
directives? Pas comme #include "/path/to/header/1.h"
(notez les guillemets autour du chemin)?Quand j'entends applet j'entends java
exemple réel, peut-être
Oui, c'était la façon dont j'ai écrit le
#include
. J'ai oublié d'écrire les guillemets quand je l'ai mis ici-bas.Ce sont les premières de l'imprimé erreurs? D'où vient la Glib::ustring de référence proviennent de? C'est étrange de voir une référence à la Glib dans un projet qui utilise Qt et KDE. Notez également que vous vous référez à une cible
plasma_engine_gdrive
dans votre CMakeLists beaucoup, mais de ce que vous avez posté, ce n'est pas réellement une cible valide. Vous ne devez pas utiliser le nom du projet en tant que cible de l'identificateur de CMake.
OriginalL'auteur hal7df | 2013-05-15
Vous devez vous connecter pour publier un commentaire.
Je travaillais avec quelques autres et je l'ai compilé!
Tous j'ai vraiment besoin, c'était de donner le nom de la bibliothèque et de le mettre en
target_link_libraries
comme suit:Mon père, d'être complètement familier avec CMake, alla et creusé le
link.txt
dans le CMake structure de construction. Là, il a juste ajouté ce qui suit après le-o
drapeau:Quand j'ai vu ça, j'ai pensé que je pourrais essayer de le faire par le biais de la liaison CMakeLists.txt -- et cela a fonctionné.
OriginalL'auteur hal7df