2011-11-03 3 views
1

J'utilise ubuntu 10.04 et libboost1.40.boost :: program_options référence non définie

ls -l /usr/lib | grep boost_pro 
    -rw-r--r-- 1 root root 640800 2010-04-01 05:19 libboost_program_options.a 
    lrwxrwxrwx 1 root root  26 2011-11-03 22:40 libboost_program_options-mt.a ->     libboost_program_options.a 
    lrwxrwxrwx 1 root root  34 2011-11-03 22:40 libboost_program_options-mt.so ->    libboost_program_options.so.1.40.0 
    lrwxrwxrwx 1 root root  34 2011-11-03 22:40 libboost_program_options.so -> libboost_program_options.so.1.40.0 
    -rw-r--r-- 1 root root 289336 2010-04-01 05:19 libboost_program_options.so.1.40.0 

c'est main.cpp (juste pour le test)

 #include <string> 
#include <iostream> 
#include <boost/date_time/gregorian/gregorian.hpp> 
#include <boost/date_time/posix_time/posix_time.hpp> 
#include <boost/program_options/options_description.hpp> 
//--------------------------------------------------------------------- 
int main(int argc,char** argv) 
{ 
boost::gregorian::date now(boost::gregorian::day_clock::local_day()); 
//is works fine 
std::cout<<boost::gregorian::to_iso_string(now)<<std::endl; 
boost::program_options::options_description a; //but here i get an error when the    constructor have started 
return 0; 
} 

    g++ -o main -lboost_date_time -lboost_program_options main.cpp && ./main 
    /tmp/cc3RJHsG.o: In function `main': 
    main.cpp:(.text+0x81): undefined reference to `boost::program_options::options_description::options_description(unsigned int, unsigned  int)' 
    collect2: ld returned 1 exit status 

je fais

find /usr/include/ -name "*description*" 
/usr/include/boost/program_options/options_description.hpp 

et il n'y a qu'un sû prototype. Des idées?

Répondre

6

Apparemment, il existe un prototype pour un constructeur à deux arguments qui prend deux unsigned int s, les deux avec une valeur par défaut. Par conséquent, cela devient le constructeur par défaut, qui est utilisé lorsque a est créé. Il est this constructor:

options_description(unsigned = m_default_line_length, 
         unsigned = m_default_line_length/2); 

Cependant, cela a été ajouté dans Boost 1,42 et does not exist dans votre version, 1.40.

Je pense donc que vous avez réussi à écraser les en-têtes installés par Ubuntu pour vous, avec une version plus récente, mais que vous n'avez pas mis à jour les bibliothèques dans /usr/lib. Essayez de désinstaller et de réinstaller le package.

Si vous avez besoin d'un plus récent Boost à 1,40, soit mettre à jour votre Ubuntu, ou désinstaller tous les paquets liés Boost et réinstaller de la source dans /usr/local. Le gestionnaire de paquets va rester à l'écart de tout ce qui est dans /usr/local, donc cela permettra de s'assurer que ce genre de problème ne se reproduise plus.

+0

merci beaucoup, maintenant ça marche –

Questions connexes