我在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_options中找到了所有其他符号; options_description是唯一未定义的引用。如果我注释掉options_description的使用但保留了positional_options_description的使用(我也在使用),那么整个程序将完美地编译和链接。我正在链接-lboost_program_options,如果我删除了它,则按预期的那样将缺少8个boost :: options_description符号。
长期以来,链接一直可以正常工作。没有任何构建系统更改,我知道它突然崩溃了。唯一的系统级别更改是对Ubuntu 15.10的升级,我认为这不会影响任何事情。
任何想法或建议表示赞赏。
更新:经过多番摆弄后,我再次使它工作,尽管我不确定是什么原因。我仍然对可能导致这种行为的任何答案感兴趣。
最佳答案
检查ABI是否兼容(您使用的是相同的编译器版本和编译boost库时使用的标志)。
在Ubuntu上,这意味着要使用带有libstdc ++的常规GCC。
如果不能,则使用首选标志编译自己的Boost System和Boost Program Options二进制文件。
如果您的编译器与在其中编译boost时使用的编译器不同,类似的事情会阻止代码示例在http://coliru.stacked-crooked.com上链接。