【问题标题】:C++, mingw and clock_gettime doesn't compileC++、mingw 和 clock_gettime 无法编译
【发布时间】:2013-04-01 15:56:07
【问题描述】:

我在使用 minGW 的 g++.exe 编译一些 Linux C++ 代码时遇到了很大的困难。 具体来说,无法理解这段代码:

  struct timespec now;
  clock_gettime(CLOCK_REALTIME,&now);

我已经添加了必要的头文件

 #include <ctime>

编译错误是:

error: aggregate 'special_time2()::timespec now' has incomplete type and cannot be defined
error: 'CLOCK_REALTIME' was not declared in this scope
error: 'clock_gettime' was not declared in this scope

有人知道为什么会发生这种情况并知道潜在的解决方法吗?

【问题讨论】:

    标签: c++ time timer mingw


    【解决方案1】:

    clock_gettime 不是标准 C 或 C++ 函数,因此无法保证它在非 POSIX 系统上可用。

    如果您正在编写现代 C++,那么您可以使用 std::chrono 库进行高精度计时。

    如果您坚持使用 2011 年之前的库,那么您唯一的选择是 time(),它通常只有一秒的精度,或者任何特定于平台的替代方案可用。不幸的是,我对 MinGW 的了解还不够,无法帮助您。

    【讨论】:

      【解决方案2】:

      更新:我刚刚用 MinGW 尝试了以下方法,但没有成功。正如另一个答案所说,POSIX 函数不一定在 Windows 下可用。这个答案并不能解决OP的问题,但它可能对其他系统的用户有用。

      clock_gettime 由 POSIX 定义,而不是由语言标准定义。

      我的系统(Ubuntu)上的手册页说:

      Feature Test Macro Requirements for glibc (see feature_test_macros(7)):
      
         clock_getres(), clock_gettime(), clock_settime():
                _POSIX_C_SOURCE >= 199309L
      

      尝试添加

      #define _POSIX_C_SOURCE 199309L
      

      #include &lt;ctime&gt;之前

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-10-17
        • 2015-09-17
        • 1970-01-01
        • 2012-06-01
        • 2021-03-03
        • 2013-04-25
        • 2017-01-18
        • 1970-01-01
        相关资源
        最近更新 更多