C++ compileren op externe Linux-machine – waarschuwing “klokfout gedetecteerd”

Ik ben verbonden met het kleine Linux-cluster van mijn universiteit via PuTTY en WinSCP, waarbij ik bestanden overzet met de laatste en ze compileert en uitvoert met de eerste. Mijn werk is tot nu toe uitgevoerd in de laboratoria van de universiteit, maar vandaag heb ik thuis wat werk gedaan dat een interessante waarschuwing opleverde.

Ik heb een hele map met dingen geüpload en bij het uitvoeren van de opdracht makekrijg ik dit als de laatste regel met uitvoer:

make: warning: klokfout gedetecteerd. Je build is mogelijk onvolledig.

Het resulterende binaire bestand werkt correct en er lijken geen andere onverwachte fouten te zijn in het bouwproces.

Ik lijk de fout te kunnen activeren door te bouwen na het uploaden van een aantal nieuwe / vervangende bestanden (ik bewerk alles lokaal en upload de nieuwe versie), dus ik vraag me af of het zoiets eenvoudigs is als niet-overeenkomende bestandswijzigingstijden? Of iets meer zorgwekkends?

Dus, moet ik me zorgen maken? Hoe kan ik dit oplossen/voorkomen?


Antwoord 1, autoriteit 100%

Dat bericht is meestal een indicatie dat sommige van uw bestanden later gewijzigd worden dan de huidige systeemtijd. Aangezien makebeslist welke bestanden moeten worden gecompileerd bij het uitvoeren van een incrementele build door te controleren of een bronbestand recenter is gewijzigd dan het objectbestand, kan deze situatie ertoe leiden dat er onnodige bestanden worden gebouwd, of erger nog, noodzakelijke bestanden om niette bouwen.

Als u echter helemaal opnieuw bouwt (geen incrementele build uitvoert), kunt u deze waarschuwing waarschijnlijk zonder gevolgen negeren.


Antwoord 2, autoriteit 26%

Dit gebeurt meestal bij het bouwen in een NFS-gemounte directory en de klokken op de client en de NFS-server lopen niet synchroon.

De oplossing is om een NTP-client uit te voeren op zowel de NFS-server als alle clients.


Antwoord 3, autoriteit 13%

Installeer het Network Time Protocol

Dit overkwam mij ook bij het uitvoeren van makeop een Samba SMB CIFS-share op een server.
Een duurzame oplossing bestaat uit het installeren van de ntpdaemon op zowel de server als de client.
(Houd er rekening mee dat dit probleem niet wordt opgelost door ntpdateuit te voeren. Dit zou het tijdsverschil slechts tijdelijk oplossen, maar niet in de toekomst.)

Voor van Ubuntu en Debian afgeleide systemen typt u gewoon de volgende regel op de opdrachtregel:

$ sudo apt install ntp

Bovendien zal men nog steeds het commando touch *één keer (en slechts één keer) in de betreffende map moeten geven om de bestandswijzigingstijden voor eens en voor altijd te corrigeren.

$ touch *

Voor meer informatie over de verschillen tussen ntpen ntpdate, zie:


Antwoord 4, autoriteit 6%

Eenvoudige oplossing:

# touch filename

zal alles goed doen.

Voor meer informatie:
http://embeddedbuzz.blogspot.in/2012 /03/make-warning-clock-skew-detected-your.html


Antwoord 5, autoriteit 3%

Volgens gebruiker m9dhatter op LinuxQuestions.org:

“make” gebruikt de tijdstempel van het bestand om te bepalen of het bestand
het probeert te compileren is oud of nieuw. als je klok bonked, kan het problemen hebben met compileren.

als u probeert om bestanden op een andere machine te wijzigen met een kloktijd die een paar minuten vooruit is en ze naar uw machine overbrengt en vervolgens probeert te compileren, kan er een waarschuwing verschijnen dat het bestand in de toekomst is gewijzigd. klok kan scheef staan of iets in die zin (kan het me niet echt herinneren). je zou gewoon naar het gewraakte bestand kunnen gaan en dit doen:

#touch <bestandsnaam van aanstootgevend bestand>


Antwoord 6, autoriteit 3%

De andere antwoorden hier leggen het probleem goed uit, dus ik zal dat hier niet herhalen. Maar er is één oplossing die dit probleem kan oplossen en die nog niet in de lijst staat: voer gewoon make cleanuit en voer vervolgens makeopnieuw uit.

Als make alle reeds gecompileerde bestanden verwijdert, zal make geen bestanden hebben om de tijdstempels van te vergelijken, waardoor de waarschuwing wordt opgelost.


Antwoord 7, autoriteit 2%

Ik heb dit in het verleden gehad, omdat de klokken op de machines uit waren. Overweeg om NTP zo in te stellen dat alle machines dezelfde tijd hebben.


Antwoord 8

Dit is meestal gewoon te wijten aan niet-overeenkomende tijden tussen uw host- en clientcomputers. U kunt proberen de tijden op uw machines te synchroniseren met ntp.


Antwoord 9

typ de terminal en het probleem wordt opgelost:

find . -type f | xargs -n 5 touch
make clean
clean

Antwoord 10

De oplossing is om een NTP-client uit te voeren, voer gewoon de onderstaande opdracht uit

#ntpdate 172.16.12.100

172.16.12.100 is de ntp-server


Antwoord 11

Vervang de horlogebatterij in uw computer. Ik heb deze foutmelding gezien toen de op munten lijkende batterij op het moederbord aan vervanging toe was.


Antwoord 12

(Voor het geval iemand hier landt)
Als je sudo-rechten hebt, is een optie om de systeemtijd te synchroniseren

sudo date -s "$(wget -qSO- --max-redirect=0 google.com 2>&1 | grep Date: | cut -d' ' -f5-8)Z"

Antwoord 13

Controleer of het resultaat van de compilatie, b.v. somefile.o, is ouder dan de bron, b.v. een bestand.c. Bovenstaande waarschuwing betekent dat er iets vreemds aan de timestaps van de bestanden is. Waarschijnlijk wijken de systeemklokken van de universiteitsserver af van uw klok en u b.v. push om 13.00 uur een bestand met wijzigingsdatum 14.00 uur. Je kunt de tijd op de console zien door de datum te typen.


Antwoord 14

Dit is mij overkomen. Het is omdat ik make -j 4heb uitgevoerd en sommige taken niet in de juiste volgorde zijn voltooid. Deze waarschuwing is te verwachten bij het gebruik van de optie -j.

Other episodes