在远程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 *
一劳永逸地修正文件修改时间。
有关ntp
和ntpdate
之间差异的更多信息,请参阅:
- 如何在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
选项时应该会出现此警告。