2012-10-10 3 views
3

Je me suis construit Ogre3D http://ogre3d.org binaires et maintenant je veux leur lier mon projet dans Qt (J'utilise CMake comme mon outil de construction). Ceci est mon fichier CMakeLists.txt:CMake lier bibliothèque partagée - ne peut pas trouver lOgreMain

project(ogre_face_test) 
cmake_minimum_required(VERSION 2.8) 
aux_source_directory(. SRC_LIST) 
add_executable(${PROJECT_NAME} ${SRC_LIST}) 

include_directories("/home/XXX/programming/SDKs/OGRE_1.8.1_BUILD/include" ".") 

link_directories("/home/XXX/programming/SDKs/OGRE_1.8.1_BUILD/lib") 
target_link_libraries(ogre_face_test "OgreMain") 

Dans .../BUILD/lib répertoire J'ai des fichiers comme: libOgreMain.so, libOgreMain.so.1.8.1 et ainsi de suite.

Je reçois cette erreur sur la liaison dans Qt Creator:

/usr/bin/cmake -H/home/XXX/programming/c++/ogre_face_sample/ogre_face_test -B/home/XXX/programming/c++/ogre_face_sample/ogre_face_test-build --check-build-system CMakeFiles/Makefile.cmake 0 
/usr/bin/cmake -E cmake_progress_start /home/XXX/programming/c++/ogre_face_sample/ogre_face_test-build/CMakeFiles /home/XXX/programming/c++/ogre_face_sample/ogre_face_test-build/CMakeFiles/progress.marks 
make -f CMakeFiles/Makefile2 all 
make[1]: Entering directory `/home/XXX/programming/c++/ogre_face_sample/ogre_face_test-build' 
make -f CMakeFiles/ogre_face_test.dir/build.make CMakeFiles/ogre_face_test.dir/depend 
make[2]: Entering directory `/home/XXX/programming/c++/ogre_face_sample/ogre_face_test-build' 
cd /home/XXX/programming/c++/ogre_face_sample/ogre_face_test-build && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /home/XXX/programming/c++/ogre_face_sample/ogre_face_test /home/XXX/programming/c++/ogre_face_sample/ogre_face_test /home/XXX/programming/c++/ogre_face_sample/ogre_face_test-build /home/XXX/programming/c++/ogre_face_sample/ogre_face_test-build /home/XXX/programming/c++/ogre_face_sample/ogre_face_test-build/CMakeFiles/ogre_face_test.dir/DependInfo.cmake --color= 
make[2]: Leaving directory `/home/XXX/programming/c++/ogre_face_sample/ogre_face_test-build' 
make -f CMakeFiles/ogre_face_test.dir/build.make CMakeFiles/ogre_face_test.dir/build 
make[2]: Entering directory `/home/XXX/programming/c++/ogre_face_sample/ogre_face_test-build' 
Linking CXX executable ogre_face_test 
/usr/bin/cmake -E cmake_link_script CMakeFiles/ogre_face_test.dir/link.txt --verbose=1 
/usr/bin/c++  CMakeFiles/ogre_face_test.dir/main.cpp.o CMakeFiles/ogre_face_test.dir/FacialAnimation.cpp.o -o ogre_face_test -rdynamic -lOgreMain 
/usr/bin/ld: cannot find -lOgreMain 
collect2: error: ld returned 1 exit status 
make[2]: *** [ogre_face_test] Error 1 
make[2]: Leaving directory `/home/XXX/programming/c++/ogre_face_sample/ogre_face_test-build' 
make[1]: *** [CMakeFiles/ogre_face_test.dir/all] Error 2 
make[1]: Leaving directory `/home/XXX/programming/c++/ogre_face_sample/ogre_face_test-build' 
make: *** [all] Error 2 

EDIT

D'autre part, si j'utilise qmake au lieu de CMake avec ce fichier:

TARGET = qt_test_1 
TEMPLATE = app 

SOURCES += main.cpp\ 
     FacialAnimation.cpp 

HEADERS += FacialAnimation.h 

INCLUDEPATH += /usr/include\ 
      /home/monkey/programming/SDKs/OGRE_1.8.1_BUILD/include 
DEPENDPATH += /usr/include 
LIBS += -L/home/monkey/programming/SDKs/OGRE_1.8.1_BUILD/lib -lOgreMain 

il liens bien.

+1

pouvez-vous lancer make avec VERBOSE = 1 (make, not cmake et non qmake) argument pour vérifier les lignes de commande qui sont utilisées? –

+0

@JanHudec Merci pour l'indice;) S'il vous plaît jeter un oeil à ma mise à jour. – Patryk

Répondre

7

La documentation CMake dit:

  • link_directories: spécifier les répertoires dans lesquels l'éditeur de liens rechercher des bibliothèques.

    link_directories(directory1 directory2 ...) 
    

    Spécifiez les chemins dans lesquels l'éditeur de liens doit rechercher des bibliothèques. La commande s'appliquera uniquement aux cibles créées après son appel. Pour des raisons historiques, les chemins relatifs donnés à cette commande sont passés à l'éditeur de liens inchangé (contrairement à de nombreuses commandes CMake qui les interprètent par rapport au répertoire source en cours).

(Souligné par l'auteur) Vous devez définir les répertoires avant que vous appelez le add_executable.

+2

@JanHudes Merci beaucoup! :) + Je dois ajouter que 'target_link_libraries (...)' doit être après 'add_executable (...)' - ce n'était pas si évident pour moi avant d'avoir lu des tutoriels liant la bibliothèque linux. – Patryk

Questions connexes