在远程Linux机器上编译C ++ – “检测到时钟歪斜”警告

我通过PuTTY和WinSCP连接到我大学的小型Linux集群,使用后者传输文件,并与前者编译和运行。 到目前为止,我的工作是在大学的实验室进行的,但今天我在家里做了一些工作,产生了一个有趣的警告。

我上传了一个完整的文件夹,运行make命令后,我把它作为输出的最后一行:

make:警告:检测到时钟歪斜。 您的构build可能不完整。

生成的二进制文件正常工作,在构build过程中似乎没有任何其他意外的错误。

我似乎能够通过上传一些新的/replace文件(我在本地编辑一切,然后上传新版本)后build立触发错误,所以我想知道是否是一样简单的文件修改时间不匹配? 还是更关心一些?

那么,我应该担心吗? 我如何解决/防止这个?

该消息通常表示某些文件的修改时间晚于当前系统时间。 由于make通过检查源文件是否比其目标文件更新更新来决定执行增量构build时要编译哪些文件,所以这种情况会导致不必要的文件被构build,或者更糟糕的是, 不能构build必要的文件。

但是,如果您正在从头开始构build(而不是增量构build),则可能会忽略此警告而没有任何后果。

通常,在NFS挂载的目录中构build时会发生这种情况,并且客户端和NFS服务器上的时钟不同步。

解决scheme是在NFS服务器和所有客户端上运行NTP客户端。

在服务器上运行Samba SMB CIFS共享时,这也发生在我身上。 一个持久的解决scheme包括在服务器和客户端上安装ntp守护进程。 (请注意,这个问题不能通过运行ntpdate来解决,这只能暂时解决时间差,而不是在将来解决。

对于Ubuntu和Debian衍生的系统,只需在命令行键入以下行:

 sudo apt-get install ntp 

此外,仍然需要在受影响的目录中一次(且仅一次)发出命令touch *一劳永逸地修正文件修改时间。

有关ntpntpdate之间差异的更多信息,请参阅:

  • 如何在Ubuntu 12.04 LTS中设置NTP服务器
  • 与NTP时间同步

简单的scheme:

 # touch filename 

会一切OK。

欲了解更多信息: http : //embeddedbuzz.blogspot.in/2012/03/make-warning-clock-skew-detected-your.html

根据LinuxQuestions.org上的用户m9dhatter :

“make”使用文件的时间戳来确定它正在尝试编译的文件是旧的还是新的。 如果你的时钟被打乱了,那么编译可能会有问题。

如果您尝试在另一台计算机上修改文件并提前几分钟,然后将其传输到您的计算机上,然后尝试进行编译,则可能会发出警告,说明该文件将来会被修改。 时钟可能会歪斜或者这种效果(真的不记得)。 你可能只是对违规文件进行操作:

#touch <违规文件的文件名>

过去我曾经有过这种情况 – 由于机器上的时钟已经停止。 考虑设置NTP,以便所有机器具有相同的时间。

这通常是由于主机和客户机之间的时间不匹配造成的。 您可以尝试使用ntp来同步机器上的时间。

这里的其他答案在解释这个问题上做得很好,所以在这里我不再重复。 但有一个解决scheme可以解决这个问题,但是还没有列出:只需运行make clean ,然后重新运行make

取消任何已编译的文件将防止有任何文件比较时间戳,解决警告。

解决scheme是运行一个NTP客户端,只需要运行下面的命令

 #ntpdate 172.16.12.100 

172.16.12.100是ntp服务器

检查编译结果,例如somefile.o是否比源文件早,比如somefile.c。 上面的警告意味着有关文件的时间戳是奇怪的。 大学服务器的系统时钟可能与你的时钟有所不同,例如,下午1点推送修改date为下午2点的文件。 您可以通过键入date在控制台上查看时间。

更换电脑中的手表电池。 当看到主板上的电池需要更换时,我看到了这个错误信息。

这发生在我身上。 这是因为我运行了make -j 4 ,有些工作是不按顺序完成的。 使用-j选项时应该会出现此警告。