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 :

Problème de linkage avec Code::Blocks


Sujet :

Boost C++

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2011
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Août 2011
    Messages : 88
    Par défaut Problème de linkage avec Code::Blocks
    Bonjour,

    Voilà des jours que je recherche, teste les solutions indiquées sur le net, mais je n'arrive toujours pas à résoudre mon problème.

    Pour un support plus efficace, je vais vous indiquer toute la procédure que j'ai faite, afin que vous puissiez me dire ce que j'aurais pu faire de mal.

    Tout d'abord, j'ai téléchargé la dernière version de boost (1.47.0) que j'ai placé dans "C:\boost\boost_1_47_0\".

    J'ai suivi plusieurs fois à la lettre le tutoriel Getting Started Guide proposé par le site.

    J'ai également téléchargé la dernière version possible de C::B.

    Après la copie, je vais dans "Settings/Compiler and debugger", onglet "Search directories" puis onglet "Compiler" et là j'ajoute :
    • C:\boost\boost_1_47_0
    • C:\boost\boost_1_47_0\boost


    De cette façon un simple projet de ce type fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <boost/lambda/lambda.hpp>
    #include <iostream>
    #include <iterator>
    #include <algorithm>
     
    int main()
    {
        using namespace boost::lambda;
        typedef std::istream_iterator<int> in;
     
        std::for_each(
            in(std::cin), in(), std::cout << (_1 * 3) << " " );
    }
    En suivant le tutoriel de boost, j'arrive à la section 5.2, j'utilise la ligne de commande pour me placer sur la racine de boost_1_47_0 et j'effectue ceci :
    Deux dossiers apparaissent :
    • bin.v2
    • stage


    J'ai également un bjam.exe qui est apparu (utilisé par .\b2 si je ne m'abuse).

    A la fin du building, je place comme indiqué le dossier "C:\boost\boost_1_47_0\stage\lib" dans "Settings/Compiler and debugger" onglet "Search directories" puis onglet "Linker".

    Ensuite, je teste le projet suivant :
    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 <boost/regex.hpp>
    #include <iostream>
    #include <string>
     
    int main()
    {
        std::string line;
        boost::regex pat( "^Subject: (Re: |Aw: )*(.*)" );
     
        while (std::cin)
        {
            std::getline(std::cin, line);
            boost::smatch matches;
            if (boost::regex_match(line, matches, pat))
                std::cout << matches[2] << std::endl;
        }
    }
    Et là j'obtiens 40 erreurs, toutes des "undefined reference to ...".

    J'ai dû faire quelque chose de travers, mais à force de refaire le tutoriel officiel, je me demande bien quoi ...

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Doubs (Franche Comté)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Par défaut
    Bonsoir,

    Je n'en suis pas certain, mais il me semble qu'il y a une bibliothèque à linker pour utiliser boost::regex. Regardes dans le dossier des bibliothèques de boost si c'est le cas, et si oui ajoute le fichier qu'il faut au linker.

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2011
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Août 2011
    Messages : 88
    Par défaut
    J'ai également des "undefined reference to ..." avec asio par exemple ... Je ne vois pas trop quoi rajouter, mis à part le dossier stage/lib/.

  4. #4
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Doubs (Franche Comté)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Par défaut
    Plus de problème pour boost::regex ?

    Selon ce que tu fais comme code asio peut avoir besoin de boost::system, c'est donc elle qu'il faut linker.

    Et après il y a des bibliothèques dépendant de la plateforme je crois (-lwsock32 -lws2_32 sous windows il me semble, il faut potasser la doc pour t'en assurer), et eventuellement un define (-D_WIN32_WINNT=0x0501 dans un code que j'avais utilisé pour tester, regardes dans la doc ca depend de ton windows je crois).

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2011
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Août 2011
    Messages : 88
    Par défaut
    Si, toujours le problème, en faite je ne vois pas du tout quoi ajouter ...
    Pour asio, par exemple si je fais un main() vide avec un simple #include <boost/asio.hpp>, j'ai encore un undefined reference ...

    J'ai déjà défini le _WIN32_WINDOWS dans mes options (sinon j'aurais un warning).

    Je ne comprend simplement pas pourquoi il n'y a aucune doc claire à ce propos.

  6. #6
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Doubs (Franche Comté)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Par défaut
    As tu ajouter les fichiers que je t'ai indiqué à ton éditeurs de lien ?

  7. #7
    Membre confirmé
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2011
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Août 2011
    Messages : 88
    Par défaut
    Oui, je les ai ajouté dans Settings/Compiler and debugger/Linker settings/.
    Ça ne change rien.

    Voici quelques screens de mes settings qui seront peut-être utiles :





  8. #8
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Doubs (Franche Comté)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Par défaut
    Il manque les fichiers de bibliothèques de boost::system et boost::regex. Regardes dans le dossier lib de boost ils y sont (plusieurs version selon ce que tu fais : static, debug, multi-thread, ect).

  9. #9
    Membre confirmé
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2011
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Août 2011
    Messages : 88
    Par défaut
    Mon problème, c'est qu'à part stage/lib, je n'ai pas de dossier lib/.

    J'ai donc retenté une installation avec l'installeur de BoostPro Computing, à présent j'ai un dossier lib/ à la racine de boost rempli de .dll et de .lib, mais tous pour visual studio ... Je pense qu'il faut que j'obtienne ceux pour mingw.

    Je dois passer par bjam avec un toolset=gcc ?

  10. #10
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Doubs (Franche Comté)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Par défaut
    Pour ta question c'est clairement écrit dans la doc concernant l'installation de boost (la réponse est oui, b2 pas bjam par contre).

    Mais si tu as un dossier stage c'est que tu avais déjà compiler boost normalement. Il y avait pas les dits fichier dans stage/lib ?

  11. #11
    Membre confirmé
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2011
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Août 2011
    Messages : 88
    Par défaut
    Mais si tu as un dossier stage c'est que tu avais déjà compiler boost normalement. Il y avait pas les dits fichier dans stage/lib ?
    Lors de ma première installation, j'ai dû compiler les sources, donc oui je suis passé par la commande .\b2 et j'ai installé dans stage/lib mais ce dossier ne contenait au final que des .lib (inutilisable par mingw si j'en crois ce lien).

    A ma deuxième installation, avec l'installeur, j'ai directement un dossier boost/lib qui contenait des .lib et des .dll cette fois-ci. Mais dans le nom de ces fichiers, on retrouve toujours msvc donc j'en ai déduit que ce n'est pas les fichiers qu'il faut pour mingw).

    Pour ta question c'est clairement écrit dans la doc concernant l'installation de boost (la réponse est oui, b2 pas bjam par contre).
    Maintenant, quand je veux faire un .\b2 avec comme toolset gcc, j'ai ces erreurs :
    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
    C:\boost\boost_1_47_0>.\b2 stage --build-type=complete --build-dir="C:\boost\boost_1_47_0\build" --toolset=gcc --stagedir="C:\boost\boost_1_47_0"
    C:/boost/boost_1_47_0/tools/build/v2/tools\gcc.jam:129: in gcc.init from module
    gcc
    error: toolset gcc initialization:
    error: no command provided, default command 'g++' not found
    error: initialized from project-config.jam:3
    C:/boost/boost_1_47_0/tools/build/v2/build\toolset.jam:38: in toolset.using from
     module toolset
    C:/boost/boost_1_47_0/tools/build/v2/build\project.jam:888: in using from module
     project-rules
    project-config.jam:3: in modules.load from module project-config
    C:/boost/boost_1_47_0/tools/build/v2\build-system.jam:257: in load-config from m
    odule build-system
    C:/boost/boost_1_47_0/tools/build/v2\build-system.jam:423: in load-configuration
    -files from module build-system
    C:/boost/boost_1_47_0/tools/build/v2\build-system.jam:555: in load from module b
    uild-system
    C:\boost\boost_1_47_0\tools\build\v2/kernel\modules.jam:283: in import from modu
    le modules
    C:\boost\boost_1_47_0\tools\build\v2\kernel\bootstrap.jam:142: in boost-build fr
    om module
    C:\boost\boost_1_47_0\boost-build.jam:17: in module scope from module
     
     
    C:\boost\boost_1_47_0>

  12. #12
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Doubs (Franche Comté)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Par défaut
    Ouvres une invite de commande et tapes g++, si t'obtient un message du genre "commande inconnue" c'est qu'il arrive pas à trouver g++, il faut que tu rajoutes le dossier des binaires (/bin) de ton MinGW dans la variable d'environnement path.

    J'ai un peu de mal à comprendre comment t'as pu te retrouver avec des bibliothèque pour mvcs si tu compiles avec gcc, t'as les deux compilateurs sur ta machine ?

  13. #13
    Membre confirmé
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2011
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Août 2011
    Messages : 88
    Par défaut
    J'ai effectivement les deux, j'ai tenté de voir si ça marchait mieux avec Visual 2010 mais j'ai aussi des problèmes ... Je suis pas doué de ce côté-là.

    Effectivement, lorsque je tape g++, j'ai une commande interne non reconnue.
    Je suis allé voir dans mes variables d'environnements, j'ai déjà une variable path, je dois donc la nommer comment ?

    PS : merci de l'attention que tu me portes. j'ai vraiment l'impression de passer pour un débutant avec mon problème ^^"

  14. #14
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Doubs (Franche Comté)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Par défaut
    Faut rajouter le chemin des binaires à la variables d'environement path. Tu te mets sur la variable path dans variables système, tu fais modifier, tu te mets au bout de la zone de texte et tu mets ";" puis le chemin de ton dossier où est g++ "C:\MinGW\bin\" par exemple (ne tape pas les " dans la zone de texte).

  15. #15
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,

    Lorsque j'ai un PC avec pléthore de compilateurs, pour ne pas perturber la compilation de boost, je fais comme suit :
    1/ J'ouvre une fenêtre de commande dos ;
    2/ J'exécute les commandes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    REM PATH limité (build_tool\bin est le répertoire de b2) : 
    set PATH=C:\msys\1.0\bin;C:\MinGW32\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\boost_1_47_0\build_tool\bin
    REM Effacement des variables liées à Visual C++ (2008 et 2010) :
    set VS90COMNTOOLS=
    set VS100COMNTOOLS=
    REM La compilation
    b2 --build-dir="C:\boost_1_47_0\build\MinGW" toolset=gcc --build-type=complete stage

  16. #16
    Membre confirmé
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2011
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Août 2011
    Messages : 88
    Par défaut
    Merci à vous deux ! Après un bon moment, j'ai enfin un dossier lib avec mes .a et .dll pour mingw44.

    Plus qu'à ajouter les bons fichiers pour boost::system et boost::regex pour voir si ça marche ... le problème c'est que dans build\MinGW\boost\bin.v2\libs\ j'ai tellement de choix que je sais pas quoi prendre (du genre choisir entre debug ou release, link-static, threading-multi, etc ...).

    Je prend lequel ?

  17. #17
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Doubs (Franche Comté)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Par défaut
    Ca dépends de ce que tu veux, on peut pas choisir à ta place, les différentes versions des fichiers sont assez clair il me semble ! Après c'est à toi de savoir si t'es en debug/release, mt, static, ect ... on peut pas vraiment choisir à ta place.

  18. #18
    Membre confirmé
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2011
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Août 2011
    Messages : 88
    Par défaut
    C'est tout bon ! Le code marche, et tout et tout, merci encore !

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

Discussions similaires

  1. Problème de compilation avec Code Block
    Par med19972004 dans le forum Code::Blocks
    Réponses: 2
    Dernier message: 16/09/2011, 16h32
  2. Problème de compilation avec Code::Blocks
    Par xvid110 dans le forum OpenCV
    Réponses: 12
    Dernier message: 13/06/2011, 23h12
  3. Problème de compilation avec Code Block
    Par med19972004 dans le forum C++
    Réponses: 5
    Dernier message: 04/02/2011, 23h49
  4. Problème de fonctionnement avec Code::Blocks
    Par turbo225 dans le forum Code::Blocks
    Réponses: 1
    Dernier message: 20/12/2008, 12h14
  5. Problème de librairie avec code blocks sous Linux
    Par philmor34 dans le forum Code::Blocks
    Réponses: 1
    Dernier message: 31/10/2008, 13h25

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