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

Qt Discussion :

Utilisation de Boost dans QtCreator


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut Utilisation de Boost dans QtCreator
    Bonjour.

    Je suis actuellement sous Linux Ubuntu 9.04, et je code à l'aide de l'IDE QtCreator.
    Je souhaiterais pouvoir utiliser la librairie Boost dans cet IDE.

    Je me suis donc orienté dans un premier temps vers la documentation de boost :
    http://www.boost.org/doc/libs/1_39_0...-variants.html

    L'installation se passe sans problème, en suivant la doc, je fait le premier test proposé. Il consiste à utiliser le header "boost/lambda/lambda.hpp" afin de faire un simple programme de multiplication. Jusque là, aucun problème, mon QtCreator trouve correctement ce fameux header, le programme compile, et il fonctionne.

    Pour ceux qui connaissent un peu boost, vous êtes au courant que certaines librairies nécessitent une compilation séparée. Par exemple :

    * Boost.Filesystem
    * Boost.IOStreams
    * Boost.ProgramOptions
    * Boost.Python
    [...]

    Je m'intéresse ici à Boost.Filesystem. J'ai déjà eu l'occasion de toucher a boost, mais la compilation se faisait en mode console, via gcc. A l'époque, en mode console, je n'avais aucun soucis avec l'utilisation de Filesystem.

    J'ai donc compiler ces fameuses librairies, et une fois tout ça terminé, j'ai voulu tester via QtCreator. Malheureusement, je rencontre quelques difficultés suite a l'utilisation des méthodes proposées par Filesystem.

    Je vous colle le code que j'utilise pour ce test, ainsi que le contenu de mon .pro :
    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
     
    #include <boost/filesystem.hpp>
    #include <iostream>
     
    using namespace std;
     
    namespace bfs = boost::filesystem;
     
    int main(void)
    {
            bfs::path p("/dev/sda1");
            bfs::space_info infos;
     
     
            if(exists(p))
            {
                    cout<<"Open" <<endl;
                    bfs::space("/dev/sda1");
     
                    cout<<"Capacity  = " <<infos.capacity <<endl;
                    cout<<"Free      = " <<infos.free <<endl;
                    cout<<"Available = " <<infos.available <<endl;
            }
            else
            {
                    cout<<"Error open" <<endl;
            }
     
            return 0;
    }
    Et le .pro :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    QT       -= gui
     
    TARGET = essaiboost
    CONFIG   += console
    CONFIG   -= app_bundle
    INCLUDEPATH += /usr/share/boost_1_39_0
    TEMPLATE = app
    SOURCES += main.cpp
    Le message d'erreur de QtCreator est le suivant :
    main.cpp::-1: error: undefined reference to `boost::system::get_system_category()'
    Pour information, mes headers boost du type .hpp sont dans /usr/share/boost_1_39_0/boost/
    Et mes librairies .so / .a sont dans /usr/share/boost_1_39_0/stage/lib/

    Comment puis-je faire pour utiliser les méthodes proposées par FileSysteme ?
    Merci de votre aide.

    Cordialement,
    PKO

  2. #2
    Membre expérimenté

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2006
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 281
    Par défaut
    Je ne connais pas très bien Boost, mais le problème ne vient pas de là...

    Comme Boost est utilisé en mode compilé, il faut lier la librairie avec l'executable. Dans le fichier .pro il faut ajouter quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LIBS += -L/usr/share/boost_1_39_0/stage/lib -lBoostFileSystem
    Par contre le "BoostFileSystem" est a remplacer avec le bon nom...

  3. #3
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Noramlement boost utilise des pragma pour ajouter automatiquement les bonne lib.
    Je dirai plutôt ,qu'il faut donner le path des lib. Un truc comme
    LIBS += -L"PATH LIB BOOST"'

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut
    Bonjour.

    Avant tout, merci pour votre aide.
    J'ai suivi vos conseils, et je me suis orienté vers la modification de mon fichier .PRO.
    Voila ce que j'ai modifié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LIBS += /usr/lib/libboost_filesystem-mt-d.so
    Là, ça semble fonctionner. j'ai pu remarquer qu'il semble y avoir un conflit entre mes version boost. Effectivement, dans /usr/lib/ , les liens concernant mes librairies boost indiquent qu'il s'agit de la version 1.37, hors, je tenté(?) de travailler avec des librairies 1.39. Un petit ménage s'impose dans un premier temps

    Par ailleurs, dans la documentation boost, il est indiqué qu'il est possible de lier les librairies de 2 manières différentes. Prenons l'exemple de la doc :

    Méthode 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     mon_path_boost/stage/lib/libboost_regex-gcc34-mt-d-1_36.a
    Méthode 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     -Lmon_path_boost/stage/lib/ -lboost_regex-gcc34-mt-d-1_36
    Chez moi, il n'y a que ca qui fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     /usr/lib/libboost_regex-gcc34-mt-d-1_36.a
    ou
     /usr/lib/libboost_regex-gcc34-mt-d-1_36.so
    Bref, ca fonctionne, mais faut encore que je fouille un peu, pour comprendre le pourquoi du comment. Je laisse le poste ouvert jusqu'à demain, en espérant avoir d'autres informations. A défaut, je place le tag "résolu" demain matin.

    Merci de votre aide.
    Cordialement,

    PKO

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

Discussions similaires

  1. Réponses: 14
    Dernier message: 01/02/2012, 00h58
  2. Utilisation de Boost dans Qt
    Par hibou107 dans le forum Boost
    Réponses: 5
    Dernier message: 06/09/2011, 16h47
  3. Boost.Python utiliser fonction C++ dans Python
    Par Balmung dans le forum Boost
    Réponses: 0
    Dernier message: 29/06/2009, 20h26
  4. Utilisation de MAX dans une requête SQL
    Par Evil onE dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/06/2004, 18h38
  5. Utilisation de Pointeurs dans API windows
    Par Drooxy dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 13/03/2003, 22h39

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