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

Boost C++ Discussion :

compilation avec boost sous éclipse


Sujet :

Boost C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 29
    Points : 13
    Points
    13
    Par défaut compilation avec boost sous éclipse
    bonjour,

    voilà, après avoir (en vain) parcouru les tutoriaux et les divers sujet traitant d'un sujet similaire, je n'ai tjrs pas réussi à résoudre mon pb.

    Je travaille sous éclipse, sous windows, sur un programme C++, (donc avec le cimpilateur g++)
    et j'essaie d'y introduire le multithreading.

    Donc dans un premier temps, pour tester cette fonctionnalité j'essaie de le faire simplement sur un programme test.

    Après avoir installé boost en suivant la démarche des tutoriaux (par exemple celui-ci http://devtricks.wordpress.com/insta...ws-avec-mingw/)
    notons au passage que j'ai bien pris la bonne version, pour
    j'ai réussi à passer la fameuse compilation de + d'une heure. les fichiers lib et bin sont bien générés.

    J'ai inclus mon répertoire "C:\MinGW\bin" dans le path, domme indiqué dans le tuto.

    J'ai redémarré Eclipse,

    mais il ne trouve pas le fichier boost/thread/thread.hpp.



    Lorsque j'essaye de faire le petit exemple du tuto, il ne trouve pas le fichier
    lboost_regex-mgw42-mt-d lors de l'exécution (exécution lancée depuis la console)
    lorsque je regarde dans mon répertoire, je n'ai aucun fichier commençant par
    lboost_regex..


    je commence à être à cours d'idée.

    Est-ce que je dois ajouter autre chose dans le path ?
    est-ce que l'install des lib boost est bien effectuée complètement ?

    n'hésitez pas a demander d'autre précisions si besoin pour éclaircir le mystère.

    Je suis sûr que c'est trois fois rien mais je suis à côté et je ne parviens plus à cerner la chose...


    merci d'avance

    xav

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    après avoir tourné en rond pendant quelquse heures... ben mon pb n'est toujours pas résolu

    mon arborescence de boots :
    c:\boost
    dans lequel se trouve notamment
    le répertoire des .hpp (un sous-répertoire boost)
    le répertoire des .lib et .dll (\lib)


    j'ai pourtant bien spécifié "C:\boost\" dans
    Options, C/C++Build/Settings -> Tool Settings -> GCC : GCC C++ Compiler / Directories)

    comme c'est indiqué ici
    http://www.developpez.net/forums/d75...ption-eclipse/

    mais rien n'y fait

    j'ai essayé avec la derniere version d'éclipse pur c++ (Helios)
    que dalle.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    la solution (mais ce n'est qu'une première étape)

    mettre les fichier hpp (qui se trouvent dans le sous-repertoire /boost/thread du contenu zip) dans le fichier include du compilateur
    (donc ici /MinGW/include)

    donc eclipse trouve le thread.hpp lorsque je mets
    #include <boost/thread.hpp>

    mais il ne trouve toujours pas les différentes fonctions
    lorsque je fais un petit code
    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
    #include <iostream>  
    #include <boost/thread.hpp>  
    #include <boost/date_time.hpp>  
     
     
    void hello()
    {
    	std::cout << "hello" << std::endl;
    }
     
    int main(int argc, char* argv[])
    {	
    	boost::thread thrd1(&hello);
    	thrd1.join();
     
    }
    voici les erreurs qu'il me sort


    boost::thread thrd1(&maFonction);
    thrd1.join();

    il me met :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    *** Build of configuration Debug for project toto ****
     
    **** Internal Builder is used for build               ****
    g++ -IC:/mingw/include/boost -O0 -g3 -Wall -c -fmessage-length=0 -osrc\toto.o ..\src\toto.cpp
    g++ -ototo.exe src\toto.o
    src\toto.o: In function `main':
    C:/workspace/toto/Debug/../src/toto.cpp:15: undefined reference to `boost::thread::join()'
    C:/workspace/toto/Debug/../src/toto.cpp:15: undefined reference to `boost::thread::~thread()'
    C:/workspace/toto/Debug/../src/toto.cpp:15: undefined reference to `boost::thread::~thread()'
    src\toto.o: In function `_ZN5boost6detail17sp_counted_impl_pINS_16exception_detail10clone_implINS2_10bad_alloc_EEEE11get_deleterERKSt9type_info':
    C:/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/boost/smart_ptr/detail/sp_counted_impl.hpp:(.text$_ZN5boost6threadC1IPFvvEEET_NS_10disable_ifINS_14is_convertibleIRS4_NS_6detail13thread_move_tIS4_EEEEPNS0_5dummyEE4typeE[boost::thread::thread<void (*)()>(void (*)(), boost::disable_if<boost::is_convertible<void (*&)(), boost::detail::thread_move_t<void (*)()> >, boost::thread::dummy*>::type)]+0x5f): undefined reference to `boost::thread::start_thread()'
    collect2: ld returned 1 exit status
    Build error occurred, build is stopped
    Time consumed: 6547  ms.

    j'ai essayé en plaçant les fichiers du répertoire lib de boost (créé lors de la compilation de boost qui prend 1 heure) dans le répertoire lib du compilateur, mais ça ne change rien.

    si quelqu'un peut m'aiguiller svp

  4. #4
    Expert confirmé Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 364
    Points : 5 378
    Points
    5 378
    Par défaut
    Ca m'a l'air bien compliqué !!!
    Je ne connais pas Eclispe pour C++.
    Citation Envoyé par xavynfive Voir le message
    j'ai pourtant bien spécifié "C:\boost\" dans
    Options, C/C++Build/Settings -> Tool Settings -> GCC : GCC C++ Compiler / Directories)
    Ca ne serait pas plutôt c:\boost\include ou c:\boost\lib ?

    mettre les fichier hpp (qui se trouvent dans le sous-repertoire /boost/thread du contenu zip) dans le fichier include du compilateur
    (donc ici /MinGW/include)
    Pourquoi faire ça !!!


    PS : pourquoi utiliser Eclipse (plutôt orienté Java) alors que Code::Blocks est fait pour C/C++ ?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    tout d'abord, merci d'avoir répondu

    Ca ne serait pas plutôt c:\boost\include ou c:\boost\lib ?
    j'avais mis
    c:\boost\
    c:\boost\lib
    il n'y a pas de répertoire include dans le répertoire d'extraction boost.
    mais même avec cela ça ne marchait pas.

    C'est en effectuant
    Citation:
    mettre les fichier hpp (qui se trouvent dans le sous-repertoire /boost/thread du contenu zip) dans le fichier include du compilateur
    (donc ici /MinGW/include)
    Pourquoi faire ça !!!
    que eclipse a enfin trouvé le fichier.

    PS : pourquoi utiliser Eclipse (plutôt orienté Java) alors que Code::Blocks est fait pour C/C++ ?
    si seulement j'avais eu le choix.
    En fait je travaille sur un projet hébergé sur un serveur. le projet est constitué de plusieurs modules, dont un en c++ sur lequel je dois implémenter le multithreading.
    Et c'est Eclipse qui est installé sur le serveur.

    Donc j'essaie d'abord de faire en sorte que ça fonctionne en local avant de porter le code (et les librairies)

  6. #6
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bjam stage --build-type=complete --build-dir="C:\Boost\build" --toolset=gcc --stagedir="C:\Boost"
    Normalement c'est à peu près tout ce que tu as à faire !!

    Après il faut rajouter dans eclipse le répertoire des include, et le répertoire des lib pour qu'il puisse compiler puis linker correctement.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    c'est bien ce que j'ai fait lors de l'installation de boost.
    A deux reprises, car la première fois, il n'avait rien créé dans le sous-répertoire boost/lib

    alors pourquoi diantre reste-t-il aveugle sur une simple déclaration ?

    boost::thread thrd1(&hello);

    qui donne

    undefined reference to `boost::thread::~thread()'

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    donc visiblement c'est un problème de link avec les lib.

    en faisant la même manip que pour les hpp (à savoir déplacer les lib dans le répertoire du compilateur mingw/lib, et bien sûr en le référençant dans les propriétés du projet (en mode debug, et en mode release)

    cela ne change rien.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    est-ce que par hasard ça peut venir du fait que ma version d'eclipse est une 32bit alors que mon os est 64 bit ?

    edit : la réponse est non.
    je cherche pour voir si y a pas une autre manip à faire sous éclipe pour qu'il daigne trouver ce *** de fichier, qui est pourtant bien présent dans le répertoire cible

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    j'ai tenté en compilant une autre version de boost (1.43 au lieu de 1.44) mais, bien que la compilation ait duré beaucoup plus longtemps, ça ne change pas le problème.
    toujours "undefined reference" sur la déclaration du thread.

  11. #11
    Membre actif

    Profil pro
    Inscrit en
    Avril 2010
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 356
    Points : 206
    Points
    206
    Par défaut
    Il me semble qu'il te faut tout de même indiquer au linker les .a que tu utilises ainsi que -lboost (je crois que c'est sa de mémoire). Après, je ne sais pas du tout ou tu configure ceci dans eclipse.

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    c'est ce que je pense avoir fait dans 'project properties>C/C++ general>path & symbols>lybrary paths
    j'y ai ajouté '<repertoire_boost>\lib'
    (donc ici C:\boost\lib )

    quand je vais dans 'project properties>C/C++ build>settings>Tools settings>MinGW C++ Linker

    je retrouve bien
    -L"C:\boost\lib"
    indiqué dans le cadre Option

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    bon après avoir quelque peu galéré, j'ai trouvé l'endroit qu'il fallait renseigner:

    project properties>C/C++ build>settings>Tools settings>MinGW C++ Linker
    mais fallait aller dans >libraries

    et là, dans les deux fenêtres, l'une (celle du bas qui indique le path des librairies) était bien renseignée
    mais celle du haut (pour le nom des librairies proprement dites) était vide.

    pour le thread, il faut rentrer le nom de la librairie (qui est pour mon cas
    libboost_thread-mgw34-mt-1_43.a )
    sans le préfixe "lib" ni le ".a"

    donc de manière générale, il faut
    - bien renseigner le chemin pour les header
    - bien renseigner le chemin pour les librairies
    - bien préciser les librairies à prendre en compte

    après cela, il fait enfin le build.
    Mais l'exécution ne fonctionne pas, car il cherche le fichier dll correspondant à la librairie.
    méthode pas très propre mais qui semble fonctionner : copier le fichier "libboost_thread-mgw34-mt-1_43.dll" dans le répertoire du projet.

    et là enfin il s'exécute sans erreur.


    j'ai donc résolu mon problème (après + de 3 jours de galère) mais si on pouvait me dire pourquoi en dernier lieu il ne trouvait pas la dll je suis preneur

    PS : merci tout de même à ceux qui m'ont répondu

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

Discussions similaires

  1. [Cal3D] Problème de compilation avec Cal3D sous windows
    Par nicoenz dans le forum Moteurs 3D
    Réponses: 2
    Dernier message: 15/11/2006, 09h46
  2. Réponses: 5
    Dernier message: 09/04/2006, 19h02
  3. [débutant]compiler avec gcc sous linux
    Par Ickou dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 10/03/2006, 17h27
  4. probleme de compilation avec boost
    Par doof dans le forum Bibliothèques
    Réponses: 7
    Dernier message: 07/06/2005, 21h38
  5. Problemes de compilation avec g++ sous linux
    Par Selimmel dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 19/09/2003, 13h43

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