Я подключен к небольшому кластеру Linux моего университета через PuTTY и WinSCP, передавая файлы с помощью последнего, компилируя и выполняя их с первым. Моя работа до сих пор выполнялась в университетских лабораториях, но сегодня я выполнял некоторую работу дома, которая вызвала интересное предупреждение.
Я загрузил целую папку с вещами и, запустив make
команду, получаю следующую строку вывода:
make: warning: Обнаружен перекос часов. Ваша сборка может быть неполной.
Полученный двоичный файл работает правильно, и в процессе сборки не возникает никаких неожиданных ошибок.
Кажется, я могу вызвать ошибку путем сборки после загрузки некоторых новых / замененных файлов (я редактирую все локально, а затем загружаю новую версию), поэтому мне интересно, не так ли просто, как несоответствующие времена модификации файла? Или что-то более важное?
Итак, я должен волноваться? Как я могу это исправить / предотвратить?
Ответы:
Это сообщение обычно указывает на то, что некоторые из ваших файлов имеют время модификации позднее текущего системного времени. Поскольку
make
решает, какие файлы компилировать при выполнении инкрементной сборки, проверяя, были ли исходные файлы изменены позднее, чем его объектный файл, эта ситуация может привести к созданию ненужных файлов или, что еще хуже, к необходимым файлам, которые не будут создаваться.Однако, если вы строите с нуля (не производите инкрементную сборку), вы, вероятно, можете игнорировать это предупреждение без последствий.
источник
touch *
обновит время до текущего времени. В качестве альтернативы вы можете включить NTP на вашем рабочем столе для синхронизации ваших часов (при условии, что это ваш рабочий стол, а не компьютер Uni ... если последний, возможно, попросите сисадминов исправить это?)touch *
это пока, и я посмотрю, смогу ли я выяснить, что не так, и, возможно, поговорить с парнем из админа в следующий раз, когда я буду на сайте.find . -exec touch {} \;
touch
может принимать несколько файлов, с которыми можно работать, вы можете сделать это (намного) более эффективно, с помощьюfind . -exec touch {} +
которого будет вызыватьсяtouch
как можно больше аргументов.Обычно это происходит при сборке в смонтированном каталоге NFS, когда часы на клиенте и сервере NFS не синхронизированы.
Решение состоит в том, чтобы запустить клиент NTP как на сервере NFS, так и на всех клиентах.
источник
Установите сетевой протокол времени
Это также случилось со мной при работе
make
на общем ресурсе Samba SMB CIFS на сервере. Надежное решение состоит в установкеntp
демона как на сервере, так и на клиенте. (Обратите внимание, что эта проблема не решается при запускеntpdate
. Это позволит устранить разницу во времени только временно, но не в будущем.)Для систем на основе Ubuntu и Debian просто введите в командной строке следующую строку:
Кроме того, по-прежнему нужно будет выполнить команду
touch *
один раз (и только один раз) в уязвимом каталоге, чтобы раз и навсегда исправить время изменения файла.Для получения дополнительной информации о различиях между
ntp
иntpdate
, пожалуйста, обратитесь к:источник
Простое решение:
все сделаю ок.
Для получения дополнительной информации: http://embeddedbuzz.blogspot.in/2012/03/make-warning-clock-skew-detected-your.html
источник
По словам пользователя m9dhatter на LinuxQuestions.org :
источник
Другие ответы здесь хорошо объясняют проблему, поэтому я не буду повторять это здесь. Но есть одно решение, которое может решить эту проблему, которого пока нет в списке: просто запустите
make clean
, а затем снова запуститеmake
.При использовании make удалить все уже скомпилированные файлы не позволит файлам make сравнивать временные метки и разрешать предупреждение.
источник
make clean
вами будут решать проблемы (создавая другие).touch
всех файлов. Вы правы, что это потребует полной перекомпиляции, но то, стоит ли это времени, будет зависеть от ваших приоритетов и размера проекта. Я не думаю, что было бы правильно сказать, что это «ненастоящее решение» только потому, что оно не самое лучшее или имеет некоторые недостатки. Это решит проблему; звучит как решение для меня.make clean
У меня было это в прошлом - из-за часов на машинах. Рассмотрите возможность настройки NTP, чтобы все машины имели одинаковое время.
источник
Обычно это происходит просто из-за несоответствия времени между вашим хостом и клиентскими компьютерами. Вы можете попытаться синхронизировать время на ваших машинах, используя ntp .
источник
Решение состоит в том, чтобы запустить клиент NTP, просто запустите команду, как показано ниже
172.16.12.100 это сервер ntp
источник
ntpdate
только одноразовая коррекция. Лучше установитьntp
как на сервер, так и на клиент, чтобы получить долговременное решение.Замените батарею часов в вашем компьютере. Я видел это сообщение об ошибке, когда нужная батарея на материнской плате нуждалась в замене.
источник
(На всякий случай, если кто-нибудь приземлится здесь). Если у вас есть права sudo, один из вариантов - синхронизировать системное время.
источник
Сделайте проверку, если результат компиляции, например somefile.o, старше, чем источник, например somefile.c. Вышеприведенное предупреждение означает, что что-то относительно временных интервалов файлов является странным. Возможно, системные часы университетского сервера отличаются от ваших часов, и вы, например, отправляете в 13:00 файл с датой изменения 14:00. Вы можете увидеть время в консоли, набрав дату.
источник
Это случилось со мной. Это потому, что я побежал,
make -j 4
и некоторые работы закончились не по порядку. Это предупреждение следует ожидать при использовании-j
опции.источник