提高:;program_options 1.49 - 无法与 -lboost_program_options 链接

Boost:;program_options 1.49 - can't link with -lboost_program_options

本文关键字:options program 链接 -lboost 提高      更新时间:2023-10-16

我第一次尝试使用Boost anything,所以我想从program_options开始。我正在开发运行Debian Wheezy的树莓派。我从"apt-get-install libboost1.49-all"开始,一切似乎都安装正确。我可以在/usr/lib中看到.a和.so库。

/usr/lib/libboost_program_options.a
/usr/lib/libboost_program_options-mt.a -> libboost_program_options.a
/usr/lib/libboost_program_options-mt.so -> libboost_program_options.so.1.49.0
/usr/lib/libboost_program_options.so -> libboost_program_options.so.1.49.0
/usr/lib/libboost_program_options.so.1.49.0

我可以使用编译我在这里找到的一些示例源代码

g++ boost_program_options.cpp -c

但我找不到任何链接。我尝试过使用no-l显式指定库路径,但只得到了几页未定义的引用错误。我尝试了另一个示例代码,但遇到了一个编译问题,这表明我没有使用"g++-std=c++0x",但这也不是问题所在。我被卡住了。我也试过

 g++ -std=c++0x boostme.cpp -o boostme -L/usr/lib -lboost_program_options

我现在只是把头撞在墙上。到目前为止,在我看到的stackoverflow帖子中,我做的每件事都是正确的。我的头很疼

下面只是一些错误消息示例。还在四处闲逛。

/tmp/ccTbmurt.o: In function `boost::program_options::error_with_option_name::~error_with_option_name()':
boostme.cpp:(.text._ZN5boost15program_options22error_with_option_nameD2Ev[_ZN5boost15program_options22error_with_option_nameD5Ev]+0x118): undefined reference to `vtable for boost::program_options::error_with_option_name'
/tmp/ccTbmurt.o: In function `boost::program_options::validation_error::validation_error(boost::program_options::validation_error::kind_t, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)':
boostme.cpp:(.text._ZN5boost15program_options16validation_errorC2ENS1_6kind_tERKSsS4_i[_ZN5boost15program_options16validation_errorC5ENS1_6kind_tERKSsS4_i]+0x30): undefined reference to `boost::program_options::validation_error::get_template(boost::program_options::validation_error::kind_t)'

因为析构函数的签名实际上应该

    ~error_with_option_name() throw() {}

我要看看我的水晶球,然后说——也许——在你的代码库中可能隐藏了#define throw()或类似的东西。

也就是说,您的包含路径中可能有冲突版本的头文件,这些头文件与链接时中找到的库的版本不一致