View previous topic :: View next topic |
Author |
Message |
Magic Banana Veteran
Joined: 13 Dec 2005 Posts: 1912 Location: Belo Horizonte, Minas Gerais, Brasil
|
Posted: Fri Feb 23, 2007 11:09 pm Post subject: [C++] Erreurs en utilisant boost/program-options (résolu) |
|
|
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 !
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 !
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... 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 |
|
|
Magic Banana Veteran
Joined: 13 Dec 2005 Posts: 1912 Location: Belo Horizonte, Minas Gerais, Brasil
|
Posted: Sat Feb 24, 2007 8:50 pm Post subject: |
|
|
Vraiment personne ? |
|
Back to top |
|
|
netfab Veteran
Joined: 03 Mar 2005 Posts: 1902 Location: 127.0.0.1
|
Posted: Sat Feb 24, 2007 10:13 pm Post subject: |
|
|
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 |
|
|
Magic Banana Veteran
Joined: 13 Dec 2005 Posts: 1912 Location: Belo Horizonte, Minas Gerais, Brasil
|
Posted: Sat Feb 24, 2007 11:04 pm Post subject: |
|
|
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 |
|
|
netfab Veteran
Joined: 03 Mar 2005 Posts: 1902 Location: 127.0.0.1
|
Posted: Sat Feb 24, 2007 11:34 pm Post subject: |
|
|
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 |
|
|
|
|
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
|
|