仅Boost Chrono标头和链接

时间:2018-09-09 20:50:27

标签: c++ boost boost-chrono

Boost Chrono Documentation说,可以将chrono库用作仅标头库。我看不到任何提及将其用作仅标头库的限制的信息。除了不需要链接到boost_chrono的明显区别外,当我定义BOOST_CHRONO_HEADER_ONLY宏时会有什么变化?

使用chrono_io功能库很有趣。我宁愿使用仅标头的版本,但想知道这样做会造成的损失。如果没有任何区别,为什么存在链接版本?

#define BOOST_CHRONO_VERSION 2

#include <boost/chrono.hpp>
#include <boost/chrono/chrono_io.hpp>

int main(int argc, char **argv)
{
    const auto now = boost::chrono::system_clock::now();

    std::cout << "It is now " 
              << boost::chrono::time_fmt(boost::chrono::timezone::local) 
              << now << "\n";

}

编译为

g++ -std=c++11 -o chronoLinked main.cpp -lboost_system -lboost_chrono
g++ -std=c++11 -o chrono main.cpp -lboost_system -D BOOST_CHRONO_HEADER_ONLY

运行两个命令都会在当前时间产生相同的输出。

1 个答案:

答案 0 :(得分:1)

如果没有记载的差异,您可以确信没有差异。

当然,技术上的区别是二进制文件会更大(包含所有必需的定义,否则共享库中就会存在)。

  

对于其他库(例如Boost System),选择仅标头的变体 会影响程序,例如链接到也使用Boost System的其他库。区别在于全局变量在动态链接方案中共享时将被复制。一个明显的例子就是错误类别。

     

如果要保持警惕,请查找需要共享(而不是重复)的(静态)全局数据。我没有立即了解Boost Chrono中的此类数据。