Компиляция С++ на удаленном компьютере Linux - предупреждение о перекосе часов

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

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

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

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

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

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

Ответ 1

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

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

Ответ 2

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

Решением является запуск NTP-клиента как на сервере NFS, так и на всех клиентах.

Ответ 3

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

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

sudo apt-get install ntp

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

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

Ответ 5

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

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

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

#touch < имя файла оскорбительного файла >

Ответ 6

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

Ответ 7

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

Ответ 8

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

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

Ответ 9

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

#ntpdate 172.16.12.100

172.16.12.100 - сервер ntp

Ответ 10

Сделать проверку, если результат компиляции, например. somefile.o, старше источника, например. somefile.c. Предупреждение выше означает, что что-то о временных файлах файлов странно. Вероятно, системные часы университетского сервера отличаются от ваших часов, и вы, например. нажмите на 1 час. файл с датой модификации 2 часа дня. Вы можете увидеть время на консоли, набрав дату.

Ответ 11

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

Ответ 12

Это случилось со мной. Это потому, что я побежал make -j 4, и некоторые задания закончились не по порядку. Это предупреждение следует ожидать при использовании параметра -j.