Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[C++] Erreurs en utilisant boost/program-options (résolu)
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index French
View previous topic :: View next topic  
Author Message
Magic Banana
Veteran
Veteran


Joined: 13 Dec 2005
Posts: 1907
Location: Belo Horizonte, Minas Gerais, Brasil

PostPosted: Fri Feb 23, 2007 11:09 pm    Post subject: [C++] Erreurs en utilisant boost/program-options (résolu) Reply with quote

Bonsoir !

Cela fait des heures que j'essaie d'utiliser la bibliothèque boost/program-options.hpp mais j'ai des erreurs au linkage. À bout, je décide de tenter la compilation du fichier en exemple le plus simple : /usr/share/doc/libboost-doc/examples/libs/program_options/example/first.cpp (détaillé dans ce tutoriel). Mêmes erreurs ! :evil:

Voilà la procédure suivie et les erreurs obtenues lors de la compilation de first.cpp (ou plus exactement lors de la phase de link) :
Code:
$ sudo emerge boost
$ cp /usr/share/doc/libboost-doc/examples/libs/program_options/example/first.cpp .
$ g++ first.cpp
/tmp/cc7SFuit.o: In function `main':
first.cpp:(.text+0xdd): référence indéfinie vers « boost::program_options::options_description::options_description(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)»
first.cpp:(.text+0x188): référence indéfinie vers « boost::program_options::options_description::add_options()     »
first.cpp:(.text+0x1af): référence indéfinie vers « boost::program_options::options_description_easy_init::operator()(char const*, char const*)»
first.cpp:(.text+0x1d1): référence indéfinie vers « boost::program_options::options_description_easy_init::operator()(char const*, boost::program_options::value_semantic const*, char const*)»
first.cpp:(.text+0x1df): référence indéfinie vers « boost::program_options::variables_map::variables_map()»
first.cpp:(.text+0x244): référence indéfinie vers « boost::program_options::store(boost::program_options::basic_parsed_options<char> const&, boost::program_options::variables_map&, bool)»
first.cpp:(.text+0x2d1): référence indéfinie vers « boost::program_options::notify(boost::program_options::variables_map&)»
first.cpp:(.text+0x3b2): référence indéfinie vers « boost::program_options::operator<<(std::basic_ostream<char, std::char_traits<char> >&, boost::program_options::options_description const&)»
/tmp/cc7SFuit.o: In function `boost::program_options::value_semantic_codecvt_helper<char>::value_semantic_codecvt_helper()':
first.cpp:(.text._ZN5boost15program_options29value_semantic_codecvt_helperIcEC2Ev[boost::program_options::value_semantic_codecvt_helper<char>::value_semantic_codecvt_helper()]+0x12): référence indéfinie vers « vtable for boost::program_options::value_semantic_codecvt_helper<char>»
/tmp/cc7SFuit.o: In function `boost::program_options::value_semantic_codecvt_helper<char>::~value_semantic_codecvt_helper()':
first.cpp:(.text._ZN5boost15program_options29value_semantic_codecvt_helperIcED2Ev[boost::program_options::value_semantic_codecvt_helper<char>::~value_semantic_codecvt_helper()]+0x7): référence indéfinie vers « vtable for boost::program_options::value_semantic_codecvt_helper<char>»
/tmp/cc7SFuit.o: In function `boost::program_options::variables_map::~variables_map()':
first.cpp:(.text._ZN5boost15program_options13variables_mapD1Ev[boost::program_options::variables_map::~variables_map()]+0x8): référence indéfinie vers « vtable for boost::program_options::variables_map»
/tmp/cc7SFuit.o: In function `boost::program_options::validation_error::validation_error(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
first.cpp:(.text._ZN5boost15program_options16validation_errorC1ERKSs[boost::program_options::validation_error::validation_error(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)]+0x1a): référence indéfinie vers « vtable for boost::program_options::validation_error»
/tmp/cc7SFuit.o: In function `std::basic_string<char, std::char_traits<char>, std::allocator<char> > const& boost::program_options::validators::get_single_string<char>(std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, bool)':
first.cpp:(.text._ZN5boost15program_options10validators17get_single_stringIcEERKSbIT_St11char_traitsIS3_ESaIS3_EERKSt6vectorIS7_SaIS7_EEb[std::basic_string<char, std::char_traits<char>, std::allocator<char> > const& boost::program_options::validators::get_single_string<char>(std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, bool)]+0x160): référence indéfinie vers « typeinfo for boost::program_options::validation_error»
first.cpp:(.text._ZN5boost15program_options10validators17get_single_stringIcEERKSbIT_St11char_traitsIS3_ESaIS3_EERKSt6vectorIS7_SaIS7_EEb[std::basic_string<char, std::char_traits<char>, std::allocator<char> > const& boost::program_options::validators::get_single_string<char>(std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, bool)]+0x285): référence indéfinie vers « typeinfo for boost::program_options::validation_error»
/tmp/cc7SFuit.o: In function `boost::program_options::validation_error::~validation_error()':
first.cpp:(.text._ZN5boost15program_options16validation_errorD1Ev[boost::program_options::validation_error::~validation_error()]+0x9): référence indéfinie vers « vtable for boost::program_options::validation_error»
/tmp/cc7SFuit.o: In function `boost::program_options::validation_error::~validation_error()':
first.cpp:(.text._ZN5boost15program_options16validation_errorD2Ev[boost::program_options::validation_error::~validation_error()]+0x9): référence indéfinie vers « vtable for boost::program_options::validation_error»
/tmp/cc7SFuit.o: In function `boost::program_options::validation_error::validation_error(boost::program_options::validation_error const&)':
first.cpp:(.text._ZN5boost15program_options16validation_errorC2ERKS1_[boost::program_options::validation_error::validation_error(boost::program_options::validation_error const&)]+0x1a): référence indéfinie vers « vtable for boost::program_options::validation_error»
/tmp/cc7SFuit.o: In function `void boost::program_options::validate<int, char>(boost::any&, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, int*, long)':
first.cpp:(.text._ZN5boost15program_options8validateIicEEvRNS_3anyERKSt6vectorISbIT0_St11char_traitsIS5_ESaIS5_EESaIS9_EEPT_l[void boost::program_options::validate<int, char>(boost::any&, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, int*, long)]+0xf): référence indéfinie vers « boost::program_options::validators::check_first_occurrence(boost::any const&)»
first.cpp:(.text._ZN5boost15program_options8validateIicEEvRNS_3anyERKSt6vectorISbIT0_St11char_traitsIS5_ESaIS5_EESaIS9_EEPT_l[void boost::program_options::validate<int, char>(boost::any&, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, int*, long)]+0xc0): référence indéfinie vers « boost::program_options::invalid_option_value::invalid_option_value(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)»
/tmp/cc7SFuit.o: In function `boost::program_options::typed_value<int, char>::name() const':
first.cpp:(.text._ZNK5boost15program_options11typed_valueIicE4nameEv[boost::program_options::typed_value<int, char>::name() const]+0x68): référence indéfinie vers « boost::program_options::arg     »
first.cpp:(.text._ZNK5boost15program_options11typed_valueIicE4nameEv[boost::program_options::typed_value<int, char>::name() const]+0x103): référence indéfinie vers « boost::program_options::arg     »
/tmp/cc7SFuit.o: In function `std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > boost::program_options::to_internal<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&)':
first.cpp:(.text._ZN5boost15program_options11to_internalISsEESt6vectorISsSaISsEERKS2_IT_SaIS5_EE[std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > boost::program_options::to_internal<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&)]+0x55): référence indéfinie vers « boost::program_options::to_internal(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)»
/tmp/cc7SFuit.o: In function `boost::program_options::basic_command_line_parser<char>::basic_command_line_parser(int, char**)':
first.cpp:(.text._ZN5boost15program_options25basic_command_line_parserIcEC1EiPPc[boost::program_options::basic_command_line_parser<char>::basic_command_line_parser(int, char**)]+0x4f): référence indéfinie vers « boost::program_options::detail::cmdline::cmdline(std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&)»
/tmp/cc7SFuit.o: In function `boost::program_options::basic_command_line_parser<char>::options(boost::program_options::options_description const&)':
first.cpp:(.text._ZN5boost15program_options25basic_command_line_parserIcE7optionsERKNS0_19options_descriptionE[boost::program_options::basic_command_line_parser<char>::options(boost::program_options::options_description const&)]+0x14): référence indéfinie vers « boost::program_options::detail::cmdline::set_options_description(boost::program_options::options_description const&)»
/tmp/cc7SFuit.o: In function `boost::program_options::basic_command_line_parser<char>::style(int)':
first.cpp:(.text._ZN5boost15program_options25basic_command_line_parserIcE5styleEi[boost::program_options::basic_command_line_parser<char>::style(int)]+0x14): référence indéfinie vers « boost::program_options::detail::cmdline::style(int)»
/tmp/cc7SFuit.o: In function `boost::program_options::basic_command_line_parser<char>::extra_parser(boost::function1<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::allocator<boost::function_base> >)':
first.cpp:(.text._ZN5boost15program_options25basic_command_line_parserIcE12extra_parserENS_9function1ISt4pairISsSsERKSsSaINS_13function_baseEEEE[boost::program_options::basic_command_line_parser<char>::extra_parser(boost::function1<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::allocator<boost::function_base> >)]+0x27): référence indéfinie vers « boost::program_options::detail::cmdline::set_additional_parser(boost::function1<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::allocator<boost::function_base> >)»
/tmp/cc7SFuit.o: In function `boost::program_options::basic_command_line_parser<char>::run()':
first.cpp:(.text._ZN5boost15program_options25basic_command_line_parserIcE3runEv[boost::program_options::basic_command_line_parser<char>::run()]+0x2a): référence indéfinie vers « boost::program_options::detail::cmdline::run()  »
/tmp/cc7SFuit.o: In function `boost::program_options::variables_map::operator[](std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const':
first.cpp:(.text._ZNK5boost15program_options13variables_mapixERKSs[boost::program_options::variables_map::operator[](std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const]+0x14): référence indéfinie vers « boost::program_options::abstract_variables_map::operator[](std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const»
/tmp/cc7SFuit.o:(.rodata._ZTVN5boost15program_options11typed_valueIicEE[vtable for boost::program_options::typed_value<int, char>]+0x18): référence indéfinie vers « boost::program_options::value_semantic_codecvt_helper<char>::parse(boost::any&, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, bool) const»
/tmp/cc7SFuit.o:(.rodata._ZTIN5boost15program_options11typed_valueIicEE[typeinfo for boost::program_options::typed_value<int, char>]+0x8): référence indéfinie vers « typeinfo for boost::program_options::value_semantic_codecvt_helper<char>»
/tmp/cc7SFuit.o:(.rodata._ZTIN5boost15program_options20invalid_option_valueE[typeinfo for boost::program_options::invalid_option_value]+0x8): référence indéfinie vers « typeinfo for boost::program_options::validation_error»
/tmp/cc7SFuit.o:(.rodata._ZTVN5boost15program_options20invalid_option_valueE[vtable for boost::program_options::invalid_option_value]+0x10): référence indéfinie vers « boost::program_options::validation_error::what() const»
collect2: ld returned 1 exit status


J'en arrive donc à me demander si cette bibliothèque n'est plus utilisable sur Gentoo... mais en fait non car sous Ubuntu Edgy Eft j'ai les mêmes erreurs ! :roll:

Il me semble qu'un bogue dans la bibliothèque boost est aussi à exclure (puisque même le fichier en exemple le plus simple qui soit ne linke pas correctement).

Je ne vois plus où chercher... :cry: Quelqu'un parmi vous a déjà réussi à utiliser boost/program_options ?


Last edited by Magic Banana on Sat Feb 24, 2007 11:05 pm; edited 1 time in total
Back to top
View user's profile Send private message
Magic Banana
Veteran
Veteran


Joined: 13 Dec 2005
Posts: 1907
Location: Belo Horizonte, Minas Gerais, Brasil

PostPosted: Sat Feb 24, 2007 8:50 pm    Post subject: Reply with quote

Vraiment personne ? :cry:
Back to top
View user's profile Send private message
netfab
Veteran
Veteran


Joined: 03 Mar 2005
Posts: 1727
Location: 127.0.0.1

PostPosted: Sat Feb 24, 2007 10:13 pm    Post subject: Reply with quote

Salut,

Quote:

$ g++ -lboost_program_options first.cpp

$ ./a.out
Compression level was not set.

$ ./a.out --help
Allowed options:
--help produce help message
--compression arg set compression level
Back to top
View user's profile Send private message
Magic Banana
Veteran
Veteran


Joined: 13 Dec 2005
Posts: 1907
Location: Belo Horizonte, Minas Gerais, Brasil

PostPosted: Sat Feb 24, 2007 11:04 pm    Post subject: Reply with quote

Merci énormément netfab ! Cela fonctionne. J'ai beau avoir épluché http://www.boost.org/doc/html/program_options/ dans le détail, je n'ai pas lu qu'il fallait ajouter une option de compilation. Où as-tu trouvé cette information ?
Back to top
View user's profile Send private message
netfab
Veteran
Veteran


Joined: 03 Mar 2005
Posts: 1727
Location: 127.0.0.1

PostPosted: Sat Feb 24, 2007 11:34 pm    Post subject: Reply with quote

Je te rassure, j'ai survolé la doc, je n'ai pas trouvé non plus.
D'autant qu'avec d'autres libs de boost, il n'y a pas besoin d'ajouter d'option pour linker.
J'ai simplement fait une recherche chez developpez.com sur les erreurs de link avec boost, et je suis tombé sur un topic où quelqu'un utilisait une option de linkage similaire pour boost::serialization (-lboost_serialization), et j'ai tenté.
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index French All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum