仅提升计时标题与链接
Boost Chrono Header Only versus 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中的此类数据。
相关文章:
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- CMake-按正确顺序将项目与C运行时对象文件链接
- 从链接列表c++中删除一个项目
- 有根的二进制搜索树.保留与其父级的链接
- 读取文件的最后一行并输入到链接列表时出错
- 静态数据成员的问题-修复链接错误会导致编译器错误
- node-gyp 在 macOS 上未正确链接库
- 基于boost的程序的静态链接——zlib问题
- 无法链接 CMake 中的本地库
- 内联函数中具有内部链接的全局变量
- 链接阶段在Ubuntu上失败,但在MacOS上失败
- 仅提升计时标题与链接
- 似乎无法将我的标题文件与我的CPP文件连接到链接列表中
- VC 链接器错误使用Dllimport/DLLEXPORT宏将标题包括在多个项目中
- 如何在VS Code中创建C++项目并链接主,函数和标题?
- 用于将优先级链接移动到列表标题的算法
- C 标题文件和链接器错误
- 标题文件中的更改破坏了链接器LNK2019
- 如何链接标题和翻译文件
- 即使我已经包含了标题和库(这是自编译的),链接错误