gpt4 book ai didi

c++ - boost::program_options 未定义引用

转载 作者:行者123 更新时间:2023-11-30 00:57:29 25 4
gpt4 key购买 nike

我使用 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

我愿意

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

而且只有类(class)的原型(prototype)。有什么想法吗?

最佳答案

显然,有一个双参数构造函数的原型(prototype),它采用两个 unsigned int,它们都具有默认值。因此,这成为默认构造函数,在创建 a 时使用。这是this constructor :

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

但是,这是在 Boost 1.42 和 does not exist 中添加的在您的版本中,1.40。

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

如果您需要比 1.40 更新的 Boost,请升级您的 Ubuntu,或者卸载所有与 Boost 相关的软件包并从 /usr/local 中的源代码重新安装。包管理器将远离 /usr/local 中的任何内容,因此这将确保此类麻烦不会再次发生。

关于c++ - boost::program_options 未定义引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8000682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com