首页 > 解决方案 > ctime, time.h, sys/time.h 乱七八糟

问题描述

我希望一些 Linux 死忠可以回答我在使用时间函数时应该如何编写可移植 (POSIX) 代码。

错误:字段“st_atim”的类型“timespec”不完整,struct timespec st_atim;

错误:'::time' 尚未声明

ETC..

那么,对于与许多第 3 方依赖项链接的 C++ 设置,确保所有内容都继续编译(包括 time.h)的正确方法是什么?我应该将系统的 time.h 包含在我正在编译的特定平台上吗?我应该检查所有可能需要 time.h 的目标吗?跳舞的大象和五彩纸屑摆在前面。


更新:该问题似乎与 C++ 的版本有关,正如以下评论中所暗示的那样。我已经将 gcc 更新到 8.3.0(从 5.4),并且我已经放弃了在 linux 上支持低于 c++11 的旧 c++ 兼容性。在更新和重建所有 3rd 方包(包括 ffmpeg)之后,我现在不再遇到我描述的问题,但这并不意味着它已经修复,因为它不会再次发生在其他人身上。事实上,我认为问题主要在于 ffmpeg 如何在较旧的编译器上编译并且没有明确要求 c++11,所以我将其保持打开状态。

标签: c++linuxtimecmake

解决方案


date我建议您考虑一下已被下一版本C++标准库 ( C++20)接受的 Howard Hinnant 的库:

https://github.com/HowardHinnant/date

它应该可以在任何支持C++11更高版本的平台上运行。

标准版本记录在这里:https ://en.cppreference.com/w/cpp/chrono


推荐阅读