我与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的升级,我认为这不会影响任何内容。
赞赏任何想法或建议。
更新经过大量的摆弄,我再次开始工作了,虽然我不确定是什么做的。我仍然对可能导致这种行为的任何答案感兴趣。
答案 0 :(得分:0)
检查ABI是否兼容(您使用相同的编译器版本和编译boost库时使用的标志)。
在Ubuntu上,这意味着使用库存GCC和libstdc ++。
如果不能,请使用首选标记编译自己的Boost系统和Boost程序选项二进制文件。
如果您的编译器与在那里编译boost时使用的编译器不同,类似的事情会阻止代码样本在http://coliru.stacked-crooked.com上链接。
答案 1 :(得分:0)
在升级到Ubuntu 15.10后,我遇到了类似的问题,但在属于boost::program_options
的lib中缺少一个不同的符号。
通过丢弃所有目标文件等并从头开始重新编译它简化了整个项目。