Boost::program_options未定义的引用

boost::program_options undefined reference

本文关键字:引用 未定义 program Boost options      更新时间:2023-10-16

我使用ubuntu 10.04和libboost1.40。

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

这是main.cpp(仅用于测试)

     #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

i do

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

当然只有一个原型。什么好主意吗?

显然,有一个双参数构造函数的原型,它接受两个具有默认值的unsigned int。因此,这将成为创建a时使用的默认构造函数。就是这个构造函数:

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

但是,这是在Boost 1.42中添加的,在1.40版本中不存在。

所以我认为你以某种方式设法覆盖了Ubuntu为你安装的头文件,用一个最新的版本,但没有更新/usr/lib中的库。尝试卸载并重新安装软件包。

如果你需要一个比1.40更新的Boost,要么升级你的Ubuntu,要么卸载所有与Boost相关的软件包,然后从/usr/local 的源代码重新安装。包管理器将远离/usr/local中的任何内容,因此这将确保此类问题不再发生。