Ubuntu16.04下Boost1.58使用std::numeric_limits链接缺失问题求助
解决Boost Units中std::numeric_limits链接缺失问题
首先,这不是Boost的Bug,也不是你遗漏了头文件——你已经正确包含了<boost/units/limits.hpp>,问题出在链接阶段需要显式链接Boost Units库。
问题原因
在Boost 1.58版本中,std::numeric_limits针对boost::units::quantity的特化,其静态成员(比如is_specialized)是定义在Boost Units的编译库文件里的,而非头文件内联实现:
- 当你直接使用
std::numeric_limits<Meter>::is_specialized的值(比如a1)时,编译器可能通过常量折叠优化直接获取值,不需要去链接库找符号; - 但当你用
const&引用这个静态成员时,编译器必须找到该符号的实际定义,所以会触发链接错误。
解决方案
修改你的编译命令,添加链接Boost Units库的参数-lboost_units:
g++ test.cpp -std=c++11 -O0 -lboost_units
额外说明
后续的Boost版本(比如1.60+)可能对这个特化做了调整,将静态成员改为内联实现,此时就不需要显式链接库。但在你使用的1.58版本中,必须链接boost_units库才能解决这个问题。
内容的提问来源于stack exchange,提问作者Gene
相关产品推荐
相关产品推荐

