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 :

Installation de boost sous GNU/linux


Sujet :

Boost C++

  1. #1
    Membre régulier
    Homme Profil pro
    Etudiant CNAM (DIE20)
    Inscrit en
    Janvier 2010
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant CNAM (DIE20)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 151
    Points : 97
    Points
    97
    Par défaut Installation de boost sous GNU/linux
    Bonjour,
    Je débute en C++ et j'ai besoin pour mon programme d'apprentissage de modifier des fichiers (suppression/déplacement) de façon portable sur linux / mac / windows.
    Je ne souhaite pas être dépendant de Qt pour ces actions même si j'envisage de faire la partie graphique avec.
    Donc mon choix se porte actuellement sur boost::filesystem qui nécessite d'être compilé, et du coup je souhaite installer complètement Boost dont les autres composants me serviront surement plus tard.

    Je suis sous kubuntu 10.10.

    J'ai décompressé la version 1.47.0 et quand je lance bjam, il ne procède pas à la compilation.
    Il tente bien de me parler, mais je ne le comprends pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    user@user-1001HA:~/Boost/boost_1_47_0$ bjam --toolset=gcc --disable-filesystem2 --prefix="/home/user/Boost/" install
    warning: mismatched versions of Boost.Build engine and core
    warning: Boost.Build engine (bjam) is 03.1.16
    warning: Boost.Build core (at /home/user/Boost/boost_1_47_0/tools/build/v2) is 2011.04-svn
    /home/user/Boost/boost_1_47_0/tools/build/v2/util/path.jam:476: in path.makedirs
    rule MAKEDIR unknown in module path.
    /home/user/Boost/boost_1_47_0/tools/build/v2/build/configure.jam:190: in configure.set-log-file
    /home/user/Boost/boost_1_47_0/tools/build/v2/build-system.jam:725: in load
    /home/user/Boost/boost_1_47_0/tools/build/v2/kernel/modules.jam:283: in import
    /home/user/Boost/boost_1_47_0/tools/build/v2/kernel/bootstrap.jam:142: in boost-build
    /home/user/Boost/boost_1_47_0/boost-build.jam:17: in module scope
    user@user-1001HA:~/Boost/boost_1_47_0$
    Je n'ai évidemment pas d'ancien projet, donc autant commencer avec la version 3, d'où le --disable-filesystem2.
    Si j'ai bien compris, --prefix renseigne sur le dossier de sortie des fichiers générés ?
    Mon compilateur est bien gcc, et il faudra que je link pour code::block, mais ça, je verrais après.

    Quelqu'un pourrait-il m'éclairer sur la marche à suivre ?
    Merci d'avance.

  2. #2
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Tu n'aurais pas installé le package boost-build par le plus grand des hasards ?

    Que répond "which bjam" ?

    Sinon, si tu n'as pas besoin de boost 1.47 et que la 1.42 te convient, tu peux tout simplement faire une simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sudo apt-get install libboost-dev libboost-doc

  3. #3
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Pour répondre à la question originale (quand même), j'ai téléchargé boost 1.47 et je suis en train de compiler cette version à l'heure actuelle.

    Tout est expliqué dans la doc (index.html -> Getting Started Guide --> Install on Unix variants ; aussi visible ici : http://www.boost.org/doc/libs/1_47_0...-variants.html).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ~$ ./booststrap --with-libraries=all --prefix=/home/me/boost
    ~$ ./b2
    ~$ ./b2 install
    Devrait suffire pour installer le tout dans /home/me/boost/{include,lib,share/doc}. En tout cas, ça marche très bien chez moi.

  4. #4
    screetch
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     --prefix=/home/me/boost
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     --prefix=/home/`whoami`/boost
    j'ai toujours rêvé d'utiliser whoami

  5. #5
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par screetch Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     --prefix=/home/me/boost
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     --prefix=/home/`whoami`/boost
    j'ai toujours rêvé d'utiliser whoami
    Alors évite les backquotes avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    prefix=/home/$(whoami)/boost
    Qui se trouve juste être plus joli selon moi, et plus simple à lire aussi

  6. #6
    Membre régulier
    Homme Profil pro
    Etudiant CNAM (DIE20)
    Inscrit en
    Janvier 2010
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant CNAM (DIE20)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 151
    Points : 97
    Points
    97
    Par défaut
    bonjour,

    pour bjam :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ~$ which bjam
    /usr/bin/bjam
    pour boost-build, j'avais effectivement essayé de passer là, mais je l'ai enlevé depuis.
    Par contre, il y a pas mal de paquets libboost-* installés, en version 1.42

    Je viens de faire un nettoyage en enlevant ces anciennes versions de bjam et des libboost-*-dev.

    Je voulais partir sur quelque chose de pérenne, étant donné si j'ai bien compris que la version 2 de boost est maintenant considérée comme deprecated, et donc utiliser la version 3 qui sera obligatoire à partir de boost 1.48.

    Donc ce soir ou demain car là je dois partir bosser, je regarde à nouveau la doc que tu m'as fournie (je l'avais déjà vue, mais c'est encore un peu obscure pour moi, va falloir que je m'y mette, en particulier comprendre ce qu'est 'b2'...).

    Bonne fin de journée à vous 2.

  7. #7
    Membre régulier
    Homme Profil pro
    Etudiant CNAM (DIE20)
    Inscrit en
    Janvier 2010
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant CNAM (DIE20)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 151
    Points : 97
    Points
    97
    Par défaut
    Bonsoir,

    J'ai donc réussi à compiler boost avec b2. J'ai fait l'installation dans /usr/local avec les commandes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ~/Boost/boost_1_47_0$ sudo ./bootstrap.sh --with-libraries=all
    ~/Boost/boost_1_47_0$ sudo ./b2
    ~/Boost/boost_1_47_0$ sudo ./b2 install
    Environ 1 heure de compilation / installation sur mon eeePC.

    Les 3 dernières lignes sont les suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...failed updating 60 targets...
    ...skipped 12 targets...
    ...updated 9364 targets...
    donc a priori classique d'après ce que j'ai pu voir sur d'autres topics...

    Maintenant, j'ai mes .a et .so dans /usr/local/lib.

    Les choses sont encore un peu difficiles à appréhender pour moi : comment faire le lien avec code::block : j'ai encore des erreurs "undefined" malgré la détection des headers de boost. Par exemple, lorsque je tente de compiler leur exemple utilisant regex, j'obtiens :
    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
    ||=== test boost, Debug ===|
    obj/Debug/main.o||In function `bool boost::regex_match<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >(__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, boost::match_results<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > >&, boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, boost::regex_constants::_match_flags)':|
    /usr/local/include/boost/regex/v4/regex_match.hpp|50|undefined reference to `boost::re_detail::perl_matcher<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::match()'|
    obj/Debug/main.o||In function `boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::assign(char const*, char const*, unsigned int)':|
    /usr/local/include/boost/regex/v4/basic_regex.hpp|379|undefined reference to `boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::do_assign(char const*, char const*, unsigned int)'|
    obj/Debug/main.o||In function `perl_matcher':|
    /usr/local/include/boost/regex/v4/perl_matcher.hpp|371|undefined reference to `boost::re_detail::perl_matcher<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::construct_init(boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, boost::regex_constants::_match_flags)'|
    obj/Debug/main.o||In function `boost::re_detail::perl_matcher<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::unwind_extra_block(bool)':|
    /usr/local/include/boost/regex/v4/perl_matcher_non_recursive.hpp|1117|undefined reference to `boost::re_detail::put_mem_block(void*)'|
    obj/Debug/main.o||In function `boost::re_detail::perl_matcher<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::match_match()':|
    /usr/local/include/boost/regex/v4/perl_matcher_non_recursive.hpp|973|undefined reference to `boost::match_results<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > >::maybe_assign(boost::match_results<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > > const&)'|
    obj/Debug/main.o||In function `void boost::re_detail::raise_error<boost::regex_traits_wrapper<boost::regex_traits<char, boost::cpp_regex_traits<char> > > >(boost::regex_traits_wrapper<boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, boost::regex_constants::error_type)':|
    /usr/local/include/boost/regex/pattern_except.hpp|75|undefined reference to `boost::re_detail::raise_runtime_error(std::runtime_error const&)'|
    obj/Debug/main.o||In function `boost::re_detail::perl_matcher<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::extend_stack()':|
    /usr/local/include/boost/regex/v4/perl_matcher_non_recursive.hpp|213|undefined reference to `boost::re_detail::get_mem_block()'|
    obj/Debug/main.o||In function `boost::cpp_regex_traits<char>::transform(char const*, char const*) const':|
    /usr/local/include/boost/regex/v4/cpp_regex_traits.hpp|916|undefined reference to `boost::re_detail::cpp_regex_traits_implementation<char>::transform(char const*, char const*) const'|
    obj/Debug/main.o||In function `boost::cpp_regex_traits<char>::transform_primary(char const*, char const*) const':|
    /usr/local/include/boost/regex/v4/cpp_regex_traits.hpp|920|undefined reference to `boost::re_detail::cpp_regex_traits_implementation<char>::transform_primary(char const*, char const*) const'|
    obj/Debug/main.o||In function `boost::re_detail::cpp_regex_traits_implementation<char>::error_string(boost::regex_constants::error_type) const':|
    /usr/local/include/boost/regex/v4/cpp_regex_traits.hpp|442|undefined reference to `boost::re_detail::get_default_error_string(boost::regex_constants::error_type)'|
    /usr/local/include/boost/regex/v4/cpp_regex_traits.hpp|444|undefined reference to `boost::re_detail::get_default_error_string(boost::regex_constants::error_type)'|
    ||=== Build finished: 11 errors, 0 warnings ===|
    Dans code::block, j'ai juste /home/user/Boost/boost_1_47_0 dans Compiler & Debugger > Search Directories > Linkers. Où faut-il ajouter le lien vers les bibliothèques compilées ?

  8. #8
    Membre régulier
    Homme Profil pro
    Etudiant CNAM (DIE20)
    Inscrit en
    Janvier 2010
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant CNAM (DIE20)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 151
    Points : 97
    Points
    97
    Par défaut
    En suivant les indications de cette page, j'ai fait ceci :
    • /usr/local/include/boost dans Compiler & Debugger > Search Directories > Resource compiler
    • /usr/local/lib/libboost_regex.a dans Compiler & Debugger > Linker Settings > link Libraries


    L'exemple donné avec regex fonctionne !

    Par contre, y'a pas moyen d'inclure tous les .a d'un coup ?

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

Discussions similaires

  1. Voir la télé sous GNU/Linux avec la DartyBox
    Par Thrystan dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 29/08/2008, 23h17
  2. comment installer un pilote sous debian linux
    Par khaliloum dans le forum Administration système
    Réponses: 1
    Dernier message: 15/08/2007, 15h45
  3. Installation de Boost (sous winxp) avec mingw
    Par Zapan77 dans le forum Bibliothèques
    Réponses: 1
    Dernier message: 11/11/2006, 01h15
  4. Que veux dire _("chaine") sous gnu/linux?
    Par trois_1 dans le forum C
    Réponses: 3
    Dernier message: 25/08/2006, 14h12
  5. Sauvegarder les pages marqués sous GNU/Linux
    Par bnadem35 dans le forum Applications et environnements graphiques
    Réponses: 4
    Dernier message: 07/07/2006, 20h50

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