我通过PuTTY和WinSCP连接到我大学的小型Linux集群,使用后者传输文件并使用前者编译和运行它们。到目前为止,我的工作已在大学的实验室进行,但今天我在家做了一些有趣的警告。
我上传了整个文件夹,在运行make
命令后,我将其作为输出的最后一行:
make:warning:检测到时钟偏差。你的构建可能不完整。
生成的二进制文件正常工作,并且在构建过程中似乎没有任何其他意外错误。
我似乎能够通过在上传一些新的/替换文件之后构建来触发错误(我在本地编辑所有内容然后上传新版本),所以我想知道它是否像文件修改时间不匹配一样简单?还是更关心的事情?
那么,我应该担心吗?我该如何解决/阻止这种情况?
答案 0 :(得分:187)
该消息通常表示您的某些文件的修改时间晚于当前系统时间。由于make
通过检查源文件是否比其目标文件更新来修改来执行增量构建时决定编译哪些文件,因此这种情况可能导致构建不必要的文件,或者更糟糕的是,必须将文件导入不建成。
但是,如果您从头开始构建(不进行增量构建),您可能会忽略此警告而不会产生任何后果。
答案 1 :(得分:53)
通常在NFS安装目录中构建时会发生这种情况,并且客户端和NFS服务器上的时钟不同步。
解决方案是在NFS服务器和所有客户端上运行NTP客户端。
答案 2 :(得分:18)
在服务器上的Samba SMB CIFS共享上运行make
时,也发生了这种情况。
持久的解决方案包括在服务器和客户端上安装ntp
守护程序。
(请注意,运行ntpdate
无法解决此问题。这只会暂时解决时间差异,但将来不会解决。)
对于Ubuntu和Debian派生的系统,只需在命令行键入以下行:
$ sudo apt-get install ntp
此外,仍然需要在受影响的目录中发出一次({且仅一次)命令{1}},以便一劳永逸地纠正文件修改时间。
touch *
有关$ touch *
和ntp
之间差异的详情,请参阅:
答案 3 :(得分:11)
简单的解决方案:
# touch filename
一切都会好的。
欲了解更多信息: http://embeddedbuzz.blogspot.in/2012/03/make-warning-clock-skew-detected-your.html
答案 4 :(得分:6)
根据user m9dhatter on LinuxQuestions.org:
“make”使用文件的时间戳来确定文件是否存在 它试图编译是旧的还是新的。如果你的时钟被刻录,它可能会有问题编译。
如果您尝试将时钟时间提前几分钟修改到另一台计算机上的文件并将其传输到您的计算机然后尝试编译它可能会发出警告,说明该文件已被修改。时钟可能会扭曲或有什么影响(不能忘记)。你可能只是对违规文件这样做:
#touch<违规文件的文件名>
答案 5 :(得分:6)
这里的其他答案很好地解释了这个问题,所以我在此不再重复。但是有一种解决方案可以解决它尚未列出的问题:只需运行make clean
,然后重新运行make
。
删除任何已编译的文件将阻止make有任何文件来比较时间戳,解决警告。
答案 6 :(得分:3)
我过去曾经有这个 - 因为机器上有时钟。考虑设置NTP,以便所有计算机都具有相同的时间。
答案 7 :(得分:2)
这通常只是由于主机和客户端计算机之间的时间不匹配。您可以尝试使用ntp同步计算机上的时间。
答案 8 :(得分:1)
解决方案是运行NTP客户端,只需运行以下命令
#ntpdate 172.16.12.100
172.16.12.100是ntp服务器
答案 9 :(得分:1)
更换计算机中的手表电池。当看到主板上的硬币电池需要更换时,我看到了这个错误信息。
答案 10 :(得分:1)
(以防万一有人落在这里) 如果您具有sudo权限,则一种方法是同步系统时间
sudo date -s "$(wget -qSO- --max-redirect=0 google.com 2>&1 | grep Date: | cut -d' ' -f5-8)Z"
答案 11 :(得分:1)
即可解决问题:
find . -type f | xargs -n 5 touch
make clean
clean
答案 12 :(得分:-1)
检查汇编的结果,例如: somefile.o比源文件旧,例如somefile.c。上面的警告意味着有关文件时间戳的内容很奇怪。大学服务器的系统时钟可能与您的时钟不同,例如在下午1点推送一个文件,修改日期是下午2点。您可以通过键入日期在控制台上查看时间。
答案 13 :(得分:-3)
这发生在我身上。这是因为我跑了make -j 4
并且一些工作没有完成。使用-j
选项时,应该会出现此警告。