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

C++ Boost链接错误-单个未定义的引用,c++,boost,linker,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:错误:ld返回1 退出状态 奇怪的是,lboost_program_选项中的所有其他符号都被找到了;选项描述是唯一未定

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

我得到以下错误:

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

奇怪的是,lboost_program_选项中的所有其他符号都被找到了;选项描述是唯一未定义的参考。如果我注释掉了选项描述的用法,但保留了位置选项描述的用法(我也在使用),那么整个程序的编译和链接都完美无缺。我正在链接-lboost_program_options,如果我像预期的那样删除它,那么就会缺少8个boost::options_描述符号

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

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


更新:在做了大量的修改后,我又让它工作起来了,尽管我不确定是什么原因造成的。不过,我仍然对导致这种行为的原因感兴趣。

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

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

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


如果您的编译器与编译boost库时使用的编译器不同,则类似的情况会阻止代码示例链接。请检查ABI是否兼容(您使用的编译器版本和编译boost库时使用的标志相同)

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

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


如果您的编译器与编译boost时使用的编译器不同,则类似的情况会阻止代码示例链接。

升级到Ubuntu 15.10后,我遇到了类似的问题,属于
boost::program\u options
的库中缺少了另一个符号


通过扔掉所有的对象文件等并从头开始重新编译,它帮助清理了整个项目。

升级到Ubuntu 15.10后,我遇到了类似的问题,属于
boost::program\u options
的库中缺少了一个不同的符号


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

升级操作系统几乎肯定会升级许多软件包。很可能是您使用apt get安装了boost(-dev),并且它现在是一个更新的版本。这是可能的,但我不明白为什么它会导致此错误。我检查了一下,以确保当前版本的boost中的API和包是相同的。升级操作系统几乎肯定会升级许多包。很可能是您使用apt get安装了boost(-dev),并且它现在是一个更新的版本。这是可能的,但我不明白为什么它会导致此错误。我检查了一下,以确保当前版本的boost中的API和包装是相同的。听说这也影响了其他人,这很有趣。我确实立即尝试了“清理”。更确切地说,我已经在我的应用程序和
boost::program_options
之间实现了一个接口库,我静态链接到我的应用程序。我还需要清理lib项目以使其正常工作。当然,我是手工做的。听说这也影响了其他人,这很有趣。我确实立即尝试了“清理”。更确切地说,我已经在我的应用程序和
boost::program_options
之间实现了一个接口库,我静态链接到我的应用程序。我还需要清理lib项目以使其正常工作。当然我是手工做的。你能进一步解释一下答案吗?我也有同样的问题,你的答案似乎正是我所需要的。我在网上尝试了这么多的解决方案,但都没有成功。你能进一步解释一下答案吗?我也有同样的问题,你的答案似乎正是我所需要的。我在网上尝试了很多解决方案,但都没有成功。