GCC 9中std::chrono::system_clock::now()的实现位置在哪里?
chrono 时钟 now() 函数实现定位 - 路径为
/usr/include/c++/9/chrono的GCC 9系统头文件仅保留标准要求的函数声明,是libstdc++的编译优化设计:将非模板类的成员函数实现从头文件剥离,既不直接在头文件内编写实现代码,也不会通过显式include语句引入实现文件,以此缩短编译耗时。 - 实际实现的存储位置分为两处:
- 已编译的二进制符号:直接打包进libstdc++的动态/静态链接库,本地默认路径为
/usr/lib/x86_64-linux-gnu/libstdc++.so.6。可执行命令nm -D /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep "chrono.*now",检索匹配std::chrono::system_clock::now()、std::chrono::steady_clock::now()等目标函数的编译后符号。 - 未编译的实现源码:不属于默认系统头文件安装包的覆盖范围,需要安装对应版本的GCC源码包后,才能在本地路径
/usr/src/gcc-9/libstdc++-v3/src/c++11/chrono.cc下查看原始实现代码。
- 已编译的二进制符号:直接打包进libstdc++的动态/静态链接库,本地默认路径为
- 该实现分发逻辑是libstdc的自定义设计,并非C标准强制要求的规则,不同标准库实现的处理方式存在差异。
内容的提问来源于stack exchange,提问作者Felix Dombek
相关产品推荐
相关产品推荐

