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

Boost linking error - single undefined reference

本文关键字:未定义 引用 单个 链接 错误 Boost      更新时间:2023-10-16

我在Boost(版本1.58)上遇到了一个奇怪的链接问题。我正在Ubuntu 15.10上使用g++4.8进行构建。

我得到以下错误:

对的未定义引用'boost::program_options::options_description::options_description(std::stringconst&,unsigned int,unsigned整型)'collect2:错误:ld返回1退出状态

奇怪的是,lbost_program_options中的所有其他符号都被找到了;options_description是唯一未定义的引用。如果我注释掉了options_description的使用,但保留了positional_option_description的使用(我也在使用它),那么整个程序就会完美地编译和链接。我正在链接-lpost_program_options,如果我删除它,那么正如预期的那样,将缺少8个boost::options_description符号。

很长一段时间以来,链接一直正常工作。在没有任何构建系统更改的情况下,我意识到它突然崩溃了。唯一的系统级别更改是升级到Ubuntu 15.10,我认为这不会影响任何事情。

任何想法或建议都将不胜感激。

更新:经过大量的摆弄,我重新开始工作,尽管我不确定是什么造成的。不过,我仍然对可能导致这种行为的任何答案感兴趣。

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

在Ubuntu上,这意味着将stock GCC与libstdc++一起使用。

如果不能,请使用您喜欢的标志编译您自己的Boost System和Boost Program Options二进制文件。

类似的事情会阻止代码示例链接到http://coliru.stacked-crooked.com如果您的编译器与编译boost时使用的编译器不同。

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

它通过丢弃所有对象文件等并从头开始重新编译来帮助清理整个项目。