首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >时间,系统/时间。

时间,系统/时间。
EN

Stack Overflow用户
提问于 2019-03-26 00:02:42
回答 1查看 7.5K关注 0票数 14

我希望某些Linux死硬的用户能够回答我在使用时间函数时应该如何编写可移植(POSIX)代码。

  • 在编写一些这样的线程建议代码时,包含ctime是正确的,而C代码仍然包括time.h。但是,它们都定义了相同的函数,尽管它们位于不同的命名空间中。从技术上讲,您应该能够同时指定两者。
  • 一个这样的帖子建议人们应该避免使用基于sys/*的所有内容。
  • 。。虽然这个线程意味着包括sys/time.h之前必须包括sys/time.h,特别是对于基于BSD的平台。
  • 这个职位说包括sys/time.h提高了可移植性。我想海报会让你链接更多使用特定功能的第三方libaries,比如gettimeofday。但是..。
  • gettimeofday()是气馁,目前正在享受已弃用状态,因此我应该使用clock_gettime()代替。这个clock_gettime()是在time.h中定义的,参见获得时间..
  • 。。如果使用libavutil安装和链接(例如,作为ffmpeg-dev的一部分),那么显然是创建time.h是为了让人发疯。Ffmpeg (和其他一些lib)有自己的时间.h,甚至timeb.h。结果是,如果构建堆栈中的任何.c或.cpp都包含一个time.h,并且包含路径包含多个有效条目(包括ffmpeg的),那么它可能引用错误的条目,而声明被简单地替换。@ FFmpeg,其理由似乎是丑陋的黑客足以解决问题。我还没那么幸运。此外,Php化所有源听起来根本不像是一个解决方案。
  • 另一次.h存在于我的系统中的usr/include/i 386-linux-gnu/bit中,所以这也不仅仅是一个ffmpeg现象。简单地将usr/ include /i 386-linux-gnu引用为包含路径就会变得非常致命,这在引用系统包含时是很奇怪的。
  • 我重写了我的CMake脚本,注意在大多数目标中使用专用包含文件夹规范。我尝试将time.h/ctime和sys/time.h的各种排列包含在一个预编译的头中,这个头在整个代码库中都是引用的。我仍然会犯这样的错误:

错误:字段‘st_atim’有不完整的类型‘timespec’,结构类型为st_atim;

错误:“:time”尚未声明

等等。

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

更新:正如下面的评论所暗示的那样,这个问题似乎与C++的版本有关。从那时起,我将gcc更新为8.3.0 (从5.4),我已经放弃了在c++11下支持更老的c++11兼容性。在更新和重建所有第三方包(包括ffmpeg)之后,我现在不再有我描述的问题了,但这并不意味着它是固定的,因为它不能再发生在其他人身上。事实上,我认为问题主要在于ffmpeg如何在旧的编译器上编译,并且没有显式地请求c++11,所以我将它保留下来。

EN

回答 1

Stack Overflow用户

发布于 2019-03-26 00:35:01

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

https://github.com/HowardHinnant/date

它应该在任何支持C++11的平台上工作。

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

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55348072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档