提升链接错误 - 单个未定义的引用

时间:2015-10-31 19:21:27

标签: c++ boost linker

我与Boost(版本1.58)有一个奇怪的链接问题。我在Ubuntu 15.10上使用g ++ 4.8构建。

我收到以下错误:

  

未定义的引用   “的boost :: program_options :: options_description :: options_description(的std :: string   const&,unsigned int,unsigned int)'collect2:error:ld返回1   退出状态

奇怪的是,找到了lboost_program_options中的所有其他符号; options_description是唯一未定义的引用。如果我注释掉options_description的使用,但继续使用positional_options_description(我也在使用),那么整个程序将完美地编译和链接。我正在使用-lboost_program_options进行链接,如果我按照预期删除它,则会有8个缺少boost :: options_description符号。

很长一段时间,链接工作正常。没有任何构建系统的变化,我意识到它突然崩溃了。唯一的系统级别更改是对Ubuntu 15.10的升级,我认为这不会影响任何内容。

赞赏任何想法或建议。

更新经过大量的摆弄,我再次开始工作了,虽然我不确定是什么做的。我仍然对可能导致这种行为的任何答案感兴趣。

2 个答案:

答案 0 :(得分:0)

检查ABI是否兼容(您使用相同的编译器版本和编译boost库时使用的标志)。

在Ubuntu上,这意味着使用库存GCC和libstdc ++。

如果不能,请使用首选标记编译自己的Boost系统和Boost程序选项二进制文件。

如果您的编译器与在那里编译boost时使用的编译器不同,类似的事情会阻止代码样本在http://coliru.stacked-crooked.com上链接。

答案 1 :(得分:0)

在升级到Ubuntu 15.10后,我遇到了类似的问题,但在属于boost::program_options的lib中缺少一个不同的符号。

通过丢弃所有目标文件等并从头开始重新编译它简化了整个项目。