IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

probleme pour l'ajout de librairie (VL_FEAT)


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    C++
    Inscrit en
    Octobre 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : C++
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 20
    Par défaut probleme pour l'ajout de librairie (VL_FEAT)
    Bonjour,

    Je souhaite ajouter la librairie VL_Feat à mon projet, et en utilisant cmake.

    Pour ce faire, j'utilise le code suivant dans le CMakeList.txt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    cmake_minimum_required(VERSION 2.6)
     
    project(MYUU)
     
    # ajout de VL_Feat
    include_directories( /moi/VLFeat/vlfeat-0.9.14/vl )
    link_directories( /moi/VLFeat/vlfeat-0.9.14/bin/glnxa64 )
    MESSAGE(STATUS "use VLFEAT ")
    Dans le dossier contenant le classe qui doit utiliser cette librairie:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    include_directories(BEFORE ${CMAKE_SOURCE_DIR})
     
    add_library(vl_dsift SHARED vl_dsift.cpp  )
    target_link_libraries(vl_dsift  ${OpenCV_LIBS} vl)
     
    install(FILES vl_dsift.h DESTINATION include/Myuu/Extracteur/vl_dsift)
    Dans vl_dsift.h je rajout le header de la lib .

    Pour l'IDE (Kdevelop) pas de probleme, quant on passe la sourie sur les fonctions de la lib il me donne les infos sur ces fonctions.
    Parcontre, imposible de compiler, le compilateur me sort " was not declared in this scope" pour chaque methode de la lib utiliser dans la classe.

    Si quelqu un a une petite idee, c'est tres frustrant de voir l'ide "comprendre" est que ca bloque au compilateur.

    Merci

  2. #2
    Membre Expert Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Par défaut
    Normalement, tu as juste à ajouter les fichiers d'en-tête avec «include_directories(~/local/include)» dans CMake

    Pour les bibliothèques, le mieux est de faire un «export» de la variable d'environnement «LD_LIBRARY_PATH» du genre:
    (en faisant attention si la variable contient déjà quelque chose ou non)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    export LD_LIBRARY_PATH="$HOME/local/lib"
    Si tu veux automatiser ça (et le rendre global), tu peux éditer ton ~/.profile de cette façon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if [ "`echo $LD_LIBRARY_PATH`" = "" ]; then
    	export LD_LIBRARY_PATH="$HOME/local/lib"
    else
    	export LD_LIBRARY_PATH="$HOME/local/lib:$LD_LIBRARY_PATH"
    fi
    Le message d'erreur vient du compilateur ou de l'éditeur de lien ?

  3. #3
    Membre averti
    Homme Profil pro
    C++
    Inscrit en
    Octobre 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : C++
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 20
    Par défaut
    Oui l'erreur vien bien du compilateur, et oui normalement y a juste à ajouter "include_directories(~/local/include)" dans CMake, mais ca serait trops symple si c'été ca .

    Pour le export je pense que je vais attendre que la compile marche ...

  4. #4
    Membre Expert Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Par défaut
    Poste le message d'erreur car lorsqu'il ne trouve pas un .h il dit «undeclared» et lorsque l'éditeur de lien ne trouve pas la fonction il dit «undefined reference to»

    Sinon, j'ai essayé de compiler vlfeat-0.9.14.
    À première vu, je n'ai pas vu de bibliothèque .so ou .a compilée.
    J'ai réussi a compiler deux exemple pris au hasard dans src «test_getopt_long» et «mser»
    Il suffit de copier le dossier src et vl dans le répertoire de ton choix et d'utiliser ce CMakeLists.txt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    cmake_minimum_required(VERSION 2.6)
     
     
    # User's settings - C Flags
    	set(release "FALSE")
    	# Release
    	if (release)
    		set(CMAKE_C_FLAGS "-O3 -msse4.1 -fpartial-inlining -ftree-loop-if-convert -march=native -mtune=native -fshrink-wrap")
    		set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -flto -fwhole-program")
    		add_definitions("-DNDEBUG")
    	# Debug # valgrind --show-reachable=yes --leak-check=full -v exe
    	else()
    		set(CMAKE_C_FLAGS "-O0 -g")
    	endif()
     
    # User's settings - General C Flags
    	set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -pedantic -Wall -Wextra")
     
     
    # Include VL_Feat for #include with < > instead of " "
    include_directories(.)
     
     
    # Display
    	message(STATUS "---")
     
    # Display
    	message(STATUS "C flags = ${CMAKE_C_FLAGS}")
    	message(STATUS "---")
     
     
    # Examples
    	message(STATUS "Add executable test_getopt_long")
    	add_executable(test_getopt_long src/test_getopt_long.c)
     
    	message(STATUS "Add executable mser")
    	add_executable(mser src/mser.c vl/generic.c vl/stringop.c vl/pgm.c vl/mser.c vl/getopt_long.c vl/host.c vl/random.c)
    	target_link_libraries(mser pthread)

  5. #5
    Membre averti
    Homme Profil pro
    C++
    Inscrit en
    Octobre 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : C++
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 20
    Par défaut
    voilla le message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    /home/nico/MYUU/build> make
    -- use OpenCV
    -- use VLFEAT 
    -- Configuring done
    -- Generating done
    -- Build files have been written to: /home/nico/MYUU/build
    [ 16%] Built target lnbnn
    [ 66%] Built target descr_model
    [ 83%] Building CXX object Extracteur/CMakeFiles/vl_dsift.dir/vl_dsift.cpp.o
    In file included from /home/nico/MYUU/Extracteur/vl_dsift.cpp:1:0:
    /home/nico/MYUU/Extracteur/vl_dsift.h:21:46: error: ‘VlDsiftFilter’ has not been declared
    /home/nico/MYUU/Extracteur/vl_dsift.cpp:27:33: error: ‘VlDsiftFilter’ has not been declared
    /home/nico/MYUU/Extracteur/vl_dsift.cpp: In member function ‘void vl_DSIFT::initVlDsiftFilter(const cv::Mat&, int*&, int) const’:
    /home/nico/MYUU/Extracteur/vl_dsift.cpp:31:74: error: ‘vl_dsift_new_basic’ was not declared in this scope
    /home/nico/MYUU/Extracteur/vl_dsift.cpp:32:3: error: ‘vl_bool’ was not declared in this scope
    /home/nico/MYUU/Extracteur/vl_dsift.cpp:32:11: error: expected ‘;’ before ‘useFlatWindow’
    /home/nico/MYUU/Extracteur/vl_dsift.cpp:33:35: error: ‘useFlatWindow’ was not declared in this scope
    /home/nico/MYUU/Extracteur/vl_dsift.cpp:33:48: error: ‘vl_dsift_set_flat_window’ was not declared in this scope
    make[2]: *** [Extracteur/CMakeFiles/vl_dsift.dir/vl_dsift.cpp.o] Error 1
    make[1]: *** [Extracteur/CMakeFiles/vl_dsift.dir/all] Error 2
    make: *** [all] Error 2
    *** Échoué ***
    Je ne souhaite pas copier les fichier de vl_feat dans mon projet, comme je pense que la methode que tu a utilisé me forcerai à faire.

    Sinon pour le .so il se trouve dans /bin/glnxa64 ou /bin/glnx86 selon l'arch du pc, et les .h dans /vl.

    merci pour ton aide en tout cas, je continue dechercher mais pour le moment j'ais rien qui marche.

  6. #6
    Membre Expert Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Par défaut
    En effet avec le .so, c'est mieux. J'ai remplacé le «add_executable» par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    message(STATUS "Add executable mser")
    add_executable(mser src/mser.c)
    target_link_libraries(mser pthread vl)
    et compiler comme ceci:
    (Note, c'est «LIBRARY_PATH» et non «LD_LIBRARY_PATH»)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    $ mkdir build
    $ cd build
    $ export LIBRARY_PATH="/media/Unstable/Projets/developpez.com/VL_Feat"
    $ cmake ..
    -- The C compiler identification is GNU 4.7.1
    -- The CXX compiler identification is GNU 4.7.1
    -- Check for working C compiler: /usr/bin/gcc
    -- Check for working C compiler: /usr/bin/gcc -- works
    -- Detecting C compiler ABI info
    -- Detecting C compiler ABI info - done
    -- Check for working CXX compiler: /usr/bin/c++
    -- Check for working CXX compiler: /usr/bin/c++ -- works
    -- Detecting CXX compiler ABI info
    -- Detecting CXX compiler ABI info - done
    -- ---
    -- C flags = -O0 -g -std=c99 -pedantic -Wall -Wextra
    -- ---
    -- Add executable test_getopt_long
    -- Add executable mser
    -- Configuring done
    -- Generating done
    -- Build files have been written to: /media/Unstable/Projets/developpez.com/VL_Feat/build
    $ make
    Scanning dependencies of target mser
    [ 50%] Building C object CMakeFiles/mser.dir/src/mser.c.o
    Linking C executable mser
    [ 50%] Built target mser
    Scanning dependencies of target test_getopt_long
    [100%] Building C object CMakeFiles/test_getopt_long.dir/src/test_getopt_long.c.o
    Linking C executable test_getopt_long
    [100%] Built target test_getopt_long
    Par contre j'ai l'impression que l'on a pas la même version de VLFeat.
    Je l'ai prise sur ce site : http://www.vlfeat.org/
    Et dans le fichier «vl/vl_dsift.h», «VlDsiftFilter» est définit à la ligne 71 (et c'est la première occurence dans le fichier)

    D'où vient ton fichier «vl_dsift.cpp», tu pourrais le poster ?
    Et ton CMakeLists.txt aussi

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/06/2007, 13h49
  2. Réponses: 1
    Dernier message: 14/02/2007, 17h08
  3. Ajouter une librairie pour php sur un Serveur dédié
    Par tchoumak dans le forum Applications et environnements graphiques
    Réponses: 1
    Dernier message: 28/06/2006, 22h22
  4. Réponses: 4
    Dernier message: 26/08/2005, 11h39
  5. Ajouter des librairies externes pour la compilation en C++
    Par Roming22 dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 11/07/2005, 10h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo