Компиляция C ++ на удаленной машине с Linux - предупреждение «Обнаружено искажение часов» - PullRequest
154 голосов
/ 29 сентября 2010

Я подключен к небольшому кластеру Linux моего университета через PuTTY и WinSCP, передавая файлы с использованием последнего, компилируя и выполняя их с первым.Моя работа до сих пор выполнялась в университетских лабораториях, но сегодня я выполнял некоторую работу дома, которая вызвала интересное предупреждение.

Я загрузил целую папку с вещами и после выполнения команды makeЯ получаю это в качестве последней строки вывода:

make: warning: Обнаружен перекос часов.Ваша сборка может быть неполной.

Полученный двоичный файл работает правильно, и в процессе сборки не возникает никаких других непредвиденных ошибок.

Кажется, я могувызвать ошибку путем сборки после загрузки некоторых новых / замененных файлов (я редактирую все локально, затем загружаю новую версию), поэтому мне интересно, не так ли просто, как несоответствующие времена модификации файла?Или что-то еще касающееся?

Итак, я должен волноваться?Как мне исправить / предотвратить это?

Ответы [ 12 ]

189 голосов
/ 29 сентября 2010

Это сообщение обычно указывает на то, что некоторые из ваших файлов имеют время модификации позже, чем текущее системное время.Поскольку make решает, какие файлы компилировать при выполнении инкрементной сборки, проверяя, были ли исходные файлы изменены позднее, чем его объектный файл, эта ситуация может привести к созданию ненужных файлов или, что еще хуже, необходимых файлов к , а не к be build.

Однако, если вы строите с нуля (не производите инкрементную сборку), вы, вероятно, можете игнорировать это предупреждение без последствий.

53 голосов
/ 28 сентября 2011

Обычно это происходит при сборке в смонтированном каталоге NFS, когда часы на клиенте и сервере NFS не синхронизированы.

Решение состоит в том, чтобы запустить клиент NTP как на сервере NFS, так и на всех клиентах.

18 голосов
/ 26 января 2014

Установите сетевой протокол времени

Это также случилось со мной при запуске make на общем ресурсе Samba SMB CIFS на сервере.Надежное решение состоит в установке демона ntp как на сервере, так и на клиенте.(Обратите внимание, что эта проблема не решается путем запуска ntpdate. Это позволит устранить разницу во времени только временно, но не в будущем.)

Для систем, производных от Ubuntu и Debian, просто введите следующеестрока в командной строке:

$ sudo apt-get install ntp

Более того, по-прежнему нужно будет выполнить команду touch * один раз (и только один раз) в уязвимом каталоге, чтобы раз и навсегда исправить время модификации файла.

$ touch *

Для получения дополнительной информации о различиях между ntp и ntpdate, пожалуйста, обратитесь к:

11 голосов
/ 31 июля 2012

Простое решение:

# touch filename

все сделает хорошо.

Для получения дополнительной информации: http://embeddedbuzz.blogspot.in/2012/03/make-warning-clock-skew-detected-your.html

6 голосов
/ 07 июля 2015

Другие ответы здесь хорошо объясняют проблему, поэтому я не буду повторять это здесь. Но есть одно решение, которое может решить эту проблему, которого пока нет в списке: просто запустите make clean, а затем снова запустите make.

Если make удалит все уже скомпилированные файлы, то у make не будет файлов для сравнения временных отметок и разрешения предупреждения.

6 голосов
/ 29 сентября 2010

Согласно пользователю m9dhatter на LinuxQuestions.org :

"make" использует временную метку файла, чтобы определить, является ли файл он пытается скомпилировать старый или новый. если ваши часы сбиты, могут возникнуть проблемы с компиляцией.

если вы попытаетесь изменить файлы на другом компьютере с опережением времени на несколько минут и перенести их на свой компьютер, а затем попытаться скомпилировать его, может появиться предупреждение о том, что файл был изменен в будущем. часы могут быть искажены или что-то в этом роде (не могу вспомнить). Вы могли бы просто обратиться к файлу-нарушителю и сделать это:

# touch <имя файла-нарушителя>

3 голосов
/ 28 сентября 2011

Я имел это в прошлом - из-за часов на машинах.Попробуйте настроить NTP, чтобы все машины имели одинаковое время.

2 голосов
/ 29 сентября 2010

Обычно это происходит из-за несоответствия времени между вашим хостом и клиентскими компьютерами.Вы можете попытаться синхронизировать время на ваших машинах, используя ntp .

1 голос
/ 27 августа 2013

Замените батарею часов в вашем компьютере. Я видел это сообщение об ошибке, когда на материнской плате нуждающаяся в монетах батарея нуждалась в замене.

1 голос
/ 28 февраля 2013

Решение состоит в том, чтобы запустить клиент NTP, просто запустите команду, как показано ниже

#ntpdate 172.16.12.100

172.16.12.100 - это сервер ntp

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...