La liaison de Tatou bibliothèques avec CMake
Je suis en train d'installer MLPack sur windows 8.
- Je configurer le CMakeLists.txt fichier:
set(ARMADILLO_LIBRARY "C:\\Program Files (x86)\\armadillo\\lib")
set(ARMADILLO_INCLUDE_DIR "C:\\Program Files (x86)\\armadillo\\include")
Puis quand j'ai couru CMake j'avais toute une série d'avertissement comme ceux-ci:
WARNING: Target "mlpack" requests linking to directory "C:\Program Files (x86)\armadillo\lib". Targets may link only to libraries. CMake is dropping the item.
Dans \mlpack-1.0.4\src\mlpack répertoire j'ai trouvé un autre CMakeLists fichier avec:
target_link_libraries(mlpack
${ARMADILLO_LIBRARIES}
${Boost_LIBRARIES}
${LIBXML2_LIBRARIES}
)
que j'ai changé (pas sûr si c'était une bonne idée):
target_link_libraries(mlpack
${Boost_LIBRARIES}
)
link_directories(mlpack
${ARMADILLO_LIBRARIES}
${LIBXML2_LIBRARIES}
)
puis CMake semble être en cours d'exécution en douceur:
-- Found Armadillo: C:\Program Files (x86)\armadillo\lib (found suitable version "3.800.2", minimum required is "2.4.2")
-- Found LibXml2: C:\cpp\libraries\libxml2-2.7.8.win32\lib (found suitable version "2.7.8", minimum required is "2.6.0")
-- Boost version: 1.53.0
-- Found the following Boost libraries:
-- program_options
-- unit_test_framework
-- Boost version: 1.53.0
-- Found the following Boost libraries:
-- random
-- Could NOT find Doxygen (missing: DOXYGEN_EXECUTABLE)
-- Configuring done
-- Generating done
-- Build files have been written to: C:/cpp/libraries/mlpack-1.0.4
mais maintenant, lors de l'exécution de faire j'ai des tonnes de telles erreurs :
Linking CXX executable ..\..\..\..\gmm.exe
CMakeFiles\gmm.dir/objects.a(gmm_main.cpp.obj):gmm_main.cpp:(.text+0xb9): undefined reference to `wrapper_dgemv_'
CMakeFiles\gmm.dir/objects.a(gmm_main.cpp.obj):gmm_main.cpp:(.text$_ZN4arma6auxlib10det_lapackIdEET_RKNS_3MatIS2_EEb[__ZN4arma6auxlib10det_lapackIdEET_RKNS_3MatIS2_EEb]+0x115): undefined reference to `wrapper_dgetrf_'
qui, après enquête, semble être lié au Tatou.
Une idée de ce qui se passe ? Je suppose que je devrais utiliser target_link_libraries pour Tatou mais je ne suis pas sûr de savoir comment.
Oui, vous avez certainement besoin target_link_libraries() lien vers Tatou dans votre propre CMakeLists.txt. Vous pouvez poster votre complet/des parties pertinentes de CMakeLists.txt
Thx a lot. Je me demande si je peux vraiment écrire la totalité du fichier, il est assez long. Pour les pièces, j'ai juste trouvé une ligne avec "find_package(Armadillo 2.4.2 OBLIGATOIRE)" et, plus tard, une ligne avec "include_directories(${ARMADILLO_INCLUDE_DIRS})". Mais je suis vrai débutant, je pourrais certainement manquer quelque chose. Les fichiers complets sont ici:mlpack.org/files/mlpack-1.0.4.tar.gz je viens de faire les modifications décrites dans le post ...
ajouter quelque chose comme ceci: target_link_libraries(gmm.exe ${ARMADILLO_LIBRARIES}). Voir si cela fonctionne. Ou simplement l'utiliser "gmm" au lieu de "gmm.exe" et essayez à nouveau
essayé avec .exe et cmake se plaint gmm.exe n'a pas été construit avec ce projet. Sans .exe, cmake se plaint gmm n'a pas été construit dans ce répertoire ...
Thx a lot. Je me demande si je peux vraiment écrire la totalité du fichier, il est assez long. Pour les pièces, j'ai juste trouvé une ligne avec "find_package(Armadillo 2.4.2 OBLIGATOIRE)" et, plus tard, une ligne avec "include_directories(${ARMADILLO_INCLUDE_DIRS})". Mais je suis vrai débutant, je pourrais certainement manquer quelque chose. Les fichiers complets sont ici:mlpack.org/files/mlpack-1.0.4.tar.gz je viens de faire les modifications décrites dans le post ...
ajouter quelque chose comme ceci: target_link_libraries(gmm.exe ${ARMADILLO_LIBRARIES}). Voir si cela fonctionne. Ou simplement l'utiliser "gmm" au lieu de "gmm.exe" et essayez à nouveau
essayé avec .exe et cmake se plaint gmm.exe n'a pas été construit avec ce projet. Sans .exe, cmake se plaint gmm n'a pas été construit dans ce répertoire ...
OriginalL'auteur Vince | 2013-04-11
Vous devez vous connecter pour publier un commentaire.
La question, je l'espère, assez facile à résoudre. Lorsque vous faites cela...
vous êtes effectivement de court-circuiter l'
find_package(Armadillo 2.4.2 REQUIRED)
appel, car il s'attend à avoir à faire le travail pour trouver ces chemins. Toutefois, lorsquefind_package
fait le travail, la variableARMADILLO_LIBRARY
obtient définissez le chemin d'accès à la bibliothèque elle-même - et non pas le chemin de la lib du répertoire.De sorte que le problème se résume à la mise
ARMADILLO_LIBRARY
pour le chemin d'accès vers le répertoire lib du répertoire plutôt que la lib elle-même. Finalement, cela donne une erreur de l'éditeur de liens, puisque la ciblegmm
(ajouté en src\mlpack\methods\gmm\CMakeLists.txt) des liens versmlpack
, etmlpack
a été mis de lien vers${ARMADILLO_LIBRARIES}
, ce qui n'est pas réglé correctement.Il s'avère que
find_package(Armadillo ...)
déjà vérifie dans"$ENV{ProgramFiles}/Armadillo/lib"
et"$ENV{ProgramFiles}/Armadillo/include"
, et j'espère que ces résoudre à"C:\\Program Files (x86)\\armadillo\\lib"
et"C:\\Program Files (x86)\\armadillo\\include"
sur votre machine.Donc, pour résoudre ce problème, vous devez supprimer les lignes de réglage
ARMADILLO_LIBRARY
etARMADILLO_INCLUDE_DIR
, et de faire revenir votre changement d'src\mlpack\CMakeLists.txt (à l'aide delink_directories
est généralement une mauvaise idée de toute façon).Après avoir effectué ces modifications, vous devez supprimer au moins votre CMakeCache.txt (dans la racine de votre arbre de construction), ou même l'ensemble de votre arbre de construction avant d'exécuter à nouveau CMake pour éviter la possibilité d'utiliser de mauvaises valeurs mises en cache à partir de précédentes tentatives infructueuses.
Oui probablement. Êtes-vous en utilisant le même générateur pour MLPack comme vous l'avez fait pour la compilation Tatou? (MinGW?) On dirait le Tatou lib est trouvé correctement, mais qu'il ne peut pas être lu correctement pour connaître sa version.
J'ai compilé tatou utilisation de cmake puis mingw32-make install. Maintenant, j'ai juste effectué de nouveau, sans aucun changement pour les fichiers cmake (à l'exception de la suppression du cache et des arbres) et les choses se sont bien déroulées (le même que quand je l'ai fait il y a quelques jours). Maintenant, je ne suis pas sûr de l'endroit où j'ai foiré la dernière fois, parce que, après que l'utilisation de cmake pour mlpack semble convaincu tatou (détecter la version 3.800.2). Mais maintenant, j'ai des avertissements sur libxml2 ("objectifs des liens uniquement vers des bibliothèques"). Vous n'avez pas compiler libxml2, il suffit de télécharger les fichiers binaires ... pourrait venir de la ? (btw, super merci pour l'aide)
Nous allons y arriver 🙂 Vous n'êtes pas de réglage
LIBXML2_LIBRARIES
explicitement trop êtes-vous? Si oui, il devrait probablement se référer également à la bibliothèque plutôt que le dossier de la bibliothèque. Je n'ai pas utiliser MinGW moi-même, mais il semble que les binaires Windows pour libxml2 ne sont pas appropriés pour une utilisation avec MSVC, pas de MinGW. Vous aurez besoin pour construire libxml2 avec mingw32-make ou peut-être obtenir l'aide de mingw-get. Essayez de googler "libxml2 mingw"aujourd'hui aux prises avec libxml2 (stackoverflow.com/questions/16007716/...) ... reviendrons dès que c'est résolu (arghhh).
OriginalL'auteur Fraser
Je réalise que j'ai un retard de réponse, et j'espère que vous avez compris maintenant. De même, je crois que votre problème est que le ARMADILLO_LIBRARY variable devrait contenir l'emplacement exact de la bibliothèque, au lieu du répertoire de la bibliothèque. Donc, peut-être que ce serait le travail:
La variable LIBXML2_LIBRARIES doit aussi contenir le chemin d'accès réel de libxml2.lib (ou quel que soit l'effectif de la bibliothèque est appelée).
Avez-vous vu cette page d'instructions que j'ai écrit tout à l'heure pour la compilation mlpack sur Windows?
http://www.mlpack.org/trac/wiki/MLPACKOnWindows
Hésitez pas à remplir un rapport de bogue sur le Trac si vous avez d'autres problèmes à l'avenir. Je ne suis tombé sur ce que, par hasard, donc je n'ai pas de moniteur de Débordement de Pile pour les questions.
OriginalL'auteur ryan
Je suis tombé sur le même problème. Il y a deux balles aramadillo bibliothèque faq qui vous demandent de décommenter les lignes
dans le fichier
qui est dans le tatou de l'arbre source.
Lorsque vous recompiler après décommentant les lignes, vous pouvez voir les symboles dans le tatou bibliothèque partagée/dll. Espérons que cette aide!
OriginalL'auteur ARegisteredUserHeIs