c++ - Boost Chrono Header Only 与 Linked
问题描述
Boost Chrono 文档说可以将 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
运行两者会产生与当前时间相同的输出。
解决方案
如果没有记录的差异,您可以确信没有差异。
当然,技术上的区别在于二进制文件会更大(包含所有必需的定义,否则会在共享库中)。
对于其他库(如 Boost System),选择仅标头变体将影响程序,例如链接到也使用 Boost System 的其他库的程序。不同之处在于全局变量在动态链接场景中共享时被复制。一个明显的例子就是错误类别。
如果您想保持警惕,请查找需要共享而不是复制的(静态)全局数据。我没有立即意识到 Boost Chrono 中的此类数据。
推荐阅读
- ios - 适当的更改不会影响 tableview 部分标题背景
- java - 如何在pdf文件中捕获表格
- automated-tests - 如何在机器人框架自动测试中使用对 POST 请求的响应
- apache-nifi - 如何在apache nifi中拆分输入json数组
- excel - 将备用单元格行剪切/复制/粘贴到下一列并在之后删除空行
- json - json 加载为 Angular 订阅后,如何将 json 转换为 JSONP?
- xamarin - 如何在 xamarin 表单中创建带有或不带有 Web 视图的富文本框?
- python - 如何修复 - 没有这样的表:main.auth_user__old
- django - base.css 没有被导入页面?
- java - 在 Cucumber 中存储 REST API 响应的最佳方式是什么