在远程 Linux 机器上编译 C++ - “检测到时钟偏差”警告

问题描述 投票:0回答:14

我使用 PuTTY 从家里连接到大学 Linux 服务器。 我使用 WinSCP 将整个源代码从 Windows 家用计算机上传到 Linux。 然后通过 PuTTY 运行

make
会生成下面一个有趣的警告。

make: warning:  Clock skew detected.  Your build may be incomplete.

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

我似乎能够通过在上传一些新/替换文件后构建来触发错误(我在本地编辑所有内容然后上传新版本),所以我想知道这是否与文件修改时间不匹配一样简单?或者还有什么更关心的?

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

linux makefile
14个回答
256
投票

该消息通常表明您的某些文件的修改时间晚于当前系统时间。由于

make
在执行增量构建时通过检查源文件是否比其目标文件修改得更晚来决定编译哪些文件,因此这种情况可能会导致构建不必要的文件,或者更糟糕的是,无法构建必要的文件已建成。 但是,如果您从头开始构建(而不是进行增量构建),您可能会忽略此警告而不会产生任何后果。


65
投票

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


37
投票

在服务器上的 Samba SMB CIFS 共享上运行

make

时,这也发生在我身上。 持久的解决方案包括在服务器和客户端上安装

ntp
守护进程。 (请注意,这个问题不能通过运行
ntpdate
来解决。这只能暂时解决时差问题,但不会在将来解决。)
对于 Ubuntu 和 Debian 衍生系统,只需在命令行中键入以下行:

$ sudo apt install ntp

此外,仍然需要在受影响的目录中发出命令 
touch *

一次(且仅一次),以一劳永逸地更正文件修改时间。

$ touch *

更多关于
ntp

ntpdate
的区别请参考:

    与NTP时间同步
  • 如何在 Ubuntu 16.04 上设置时间同步

15
投票

# touch filename

一切都会好的。

欲了解更多信息:

http://embeddedbuzz.blogspot.in/2012/03/make-warning-clock-skew-detected-your.html


8
投票

find . -type f | xargs -n 5 touch make clean clean



7
投票
make clean

,然后重新运行

make

让 make 删除任何已编译的文件将阻止 make 比较任何文件的时间戳,从而解决警告。


6
投票
用户 m9dhatter

“make”使用文件的时间戳来确定文件是否 它正在尝试编译是旧的还是新的。如果你的时钟坏了,编译可能会出现问题。

如果您尝试在时钟时间提前几分钟的另一台计算机上修改文件并将它们传输到您的计算机,然后尝试编译,可能会发出警告,指出该文件是从未来修改的。时钟可能会倾斜或有类似的效果(不太记得了)。你可以直接 ls 到有问题的文件并执行以下操作:

#触摸


4
投票


2
投票
ntp

来同步您机器上的时间。


1
投票

#ntpdate 172.16.12.100

172.16.12.100 是 ntp 服务器 


1
投票


1
投票

sudo date -s "$(wget -qSO- --max-redirect=0 google.com 2>&1 | grep Date: | cut -d' ' -f5-8)Z"



-1
投票


-5
投票
make -j 4

并且一些工作没有按顺序完成。使用

-j
选项时应该会出现此警告。
    

© www.soinside.com 2019 - 2024. All rights reserved.