Boost链接错误-单个未定义的引用
Boost linking error - single undefined reference
我在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
的库中缺少不同的符号。
它通过丢弃所有对象文件等并从头开始重新编译来帮助清理整个项目。
- 对C宏的未定义引用,但在定义它时会出现重新定义错误
- 编译时的 CImg 库返回对"__imp_SetDIBitsToDevice"的未定义引用
- 对Py_Initialize()的未定义引用
- 使用mysql c++连接器的未定义引用
- 对 Scalar ::Scalar() 的未定义引用
- 对复制 CTOR 和 CTOR 的未定义引用
- 对显式实例化的模板函数的未定义引用
- TensorRT (C++ API) 对"createNvOnnxParser_INTERNAL"的未定义引用
- 2个模板化类的非模板友元函数未定义引用错误
- 编译 libfluid 样本控制器时对"event_base_del_virtual"的未定义引用
- 获取对function_name的未定义引用
- 对 'std::thread::_M_start_thread CMake 的未定义引用进行基准测试
- 对结构方法的未定义引用
- 使用内联函数 c++ 的未定义引用
- 对 CMake 中'cudaRegisterLinkedBinary'链接错误的未定义引用?
- 对 DLOPEN 的未定义引用
- QT C++中对全局变量的未定义引用
- 快速数学导致对"__pow_finite"的未定义引用
- 对 boost::system::d etail::system_category_instance 的未定义引用,从
- OpenCV 3.4.3 中对 'cv::String::d eallocate()' 错误的未定义引用