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++

  1. #1
    Membre à l'essai
    Homme Profil pro
    C++
    Inscrit en
    Octobre 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 20
    Points : 16
    Points
    16
    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 chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

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

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    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 à l'essai
    Homme Profil pro
    C++
    Inscrit en
    Octobre 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 20
    Points : 16
    Points
    16
    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 chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

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

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    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 à l'essai
    Homme Profil pro
    C++
    Inscrit en
    Octobre 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 20
    Points : 16
    Points
    16
    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 chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

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

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    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

  7. #7
    Membre à l'essai
    Homme Profil pro
    C++
    Inscrit en
    Octobre 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 20
    Points : 16
    Points
    16
    Par défaut
    J'ai la version vlfeat-0.9.14. comme toi et téléchargé sur le même site.


    Le fichier vl_dsift.cpp et .h sont à moi, je les poste ci-dessous:

    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
     
    #include "vl_dsift.h"
    #include <vl/dsift.h>
     
    vl_DSIFT::vl_DSIFT(){}
    vl_DSIFT::~vl_DSIFT(){}
     
    void vl_DSIFT::initVlDsiftFilter(const cv::Mat& img,
                                    VlDsiftFilter *& dsift,
                                    int bin_size_
                                   ) const
    {
      dsift = vl_dsift_new_basic (img.cols, img.rows, grid_spacing, bin_size_);
      vl_bool useFlatWindow = (is_useFlatWindow!=0 ?  VL_TRUE : VL_FALSE);
      vl_dsift_set_flat_window(dsift, useFlatWindow);
     
    }
    le .h
    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
     
    #ifndef VL_DSIFT_H
    #define VL_DSIFT_H
    #include <Utils/parametres.h>
    #include <opencv2/core/core.hpp>
     
    class vl_DSIFT
    {
    public:
      vl_DSIFT();
      ~vl_DSIFT();
     
      ??????????
      ??????????
     
    private:  
      void initVlDsiftFilter(const cv::Mat& img, VlDsiftFilter *& dsift, int bin_size_) const;
     
      ??????????
      ??????????
    };
    #endif // VL_DSIFT_H
    et pour la compile:
    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
    [moi@Myuu build]$ cmake ..
    -- use OpenCV
    -- use VLFEAT 
    -- Configuring done
    -- Generating done
    -- Build files have been written to: /moi/MYUU/build
    [moi@Myuu build]$ cmake ..
    -- use OpenCV
    -- use VLFEAT 
    -- Configuring done
    -- Generating done
    -- Build files have been written to: /moi/MYUU/build
    [moi@Myuu build]$ install
    install: opérande fichier manquant
    Try 'install --help' for more information.
    [moi@Myuu build]$ make ..
    [moi@Myuu build]$ make 
    [ 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 /moi/MYUU/Extracteur/vl_dsift.cpp:1:0:
    /moi/MYUU/Extracteur/vl_dsift.h:21:46: erreur: ‘VlDsiftFilter’ has not been declared
    /moi/MYUU/Extracteur/vl_dsift.cpp:27:33: erreur: ‘VlDsiftFilter’ has not been declared
    /moi/MYUU/Extracteur/vl_dsift.cpp: In member function ‘void vl_DSIFT::initVlDsiftFilter(const cv::Mat&, int*&, int) const’:
    /moi/MYUU/Extracteur/vl_dsift.cpp:31:74: erreur: ‘vl_dsift_new_basic’ was not declared in this scope
    /moi/MYUU/Extracteur/vl_dsift.cpp:32:3: erreur: ‘vl_bool’ was not declared in this scope
    /moi/MYUU/Extracteur/vl_dsift.cpp:32:11: erreur: expected ‘;’ before ‘useFlatWindow’
    /moi/MYUU/Extracteur/vl_dsift.cpp:33:35: erreur: ‘useFlatWindow’ was not declared in this scope
    /moi/MYUU/Extracteur/vl_dsift.cpp:33:48: erreur: ‘vl_dsift_set_flat_window’ was not declared in this scope
    make[2]: *** [Extracteur/CMakeFiles/vl_dsift.dir/vl_dsift.cpp.o] Erreur 1
    make[1]: *** [Extracteur/CMakeFiles/vl_dsift.dir/all] Erreur 2
    make: *** [all] Erreur 2

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

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

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    Ton cpp ne doit inclure que le .h[pp] local
    et c'est le .h[pp] local qui inclus les fichiers d'entête des biliothèques

  9. #9
    Membre à l'essai
    Homme Profil pro
    C++
    Inscrit en
    Octobre 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 20
    Points : 16
    Points
    16
    Par défaut
    oui c'était juste un test, mais dans les deux cas ca ne marche pas.

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

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

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    Et si tu remplaces (pour tester) dans ton vl_dsift.h le
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #include "/chemin/absolu/vers/vlfeat-0.9.14/vl/dsift.h"

  11. #11
    Membre à l'essai
    Homme Profil pro
    C++
    Inscrit en
    Octobre 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 20
    Points : 16
    Points
    16
    Par défaut
    non toujours rien

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

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

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    Dans le fichier vl/dsift.h, on trouve aussi la protection du fichier d'entête que tu as utilisé pour ton propre vl_dsift.h local -_-
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #ifndef VL_DSIFT_H
    #define VL_DSIFT_H
    Trouve toi un autre nom
    Car comme VL_DSIFT_H est défini dans ton propre vl_dsift.h, lors de l'inclusion de vl/dsift.h, il pense qu'il a déjà été inclus et ne l'inclus pas.

  13. #13
    Membre à l'essai
    Homme Profil pro
    C++
    Inscrit en
    Octobre 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 20
    Points : 16
    Points
    16
    Par défaut
    merci c'été bien ca mon problème, j'suis trop ****** .

    Bravo à toi et encore merci.

+ 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