Estoy conectado al pequeño clúster de Linux de mi universidad a través de PuTTY y WinSCP, transfiriendo archivos usando este último y compilándolos y ejecutándolos con el primero. Mi trabajo hasta el momento se ha realizado en los laboratorios de la universidad, pero hoy he estado haciendo un trabajo en casa que generó una advertencia interesante.
Subí una carpeta completa de cosas y, al ejecutar el make
comando, obtengo esto como la última línea de salida:
make: advertencia: reloj sesgo detectado. Su construcción puede estar incompleta.
El binario resultante funciona correctamente y no parece haber ningún otro error inesperado en el proceso de compilación.
Parece que puedo activar el error construyendo después de cargar algunos archivos nuevos / de reemplazo (edito todo localmente y luego subo la nueva versión), así que me pregunto si es algo tan simple como los tiempos de modificación de archivos no coincidentes. ¿O algo más preocupante?
Entonces, ¿debería estar preocupado? ¿Cómo soluciono / evito esto?
Respuestas:
Ese mensaje suele indicar que algunos de sus archivos tienen tiempos de modificación posteriores a la hora actual del sistema. Dado
make
que decide qué archivos compilar al realizar una compilación incremental verificando si los archivos fuente se han modificado más recientemente que su archivo objeto, esta situación puede hacer que se compilen archivos innecesarios o, peor aún, que no se compilen los archivos necesarios .Sin embargo, si está construyendo desde cero (no está haciendo una construcción incremental), es probable que pueda ignorar esta advertencia sin consecuencias.
fuente
touch *
actualizará los mtimes a la hora actual. Alternativamente, puede habilitar NTP en su escritorio para sincronizar su reloj (suponiendo que es su escritorio lo que está mal, y no la máquina de Uni ... si es esto último, ¿tal vez les pida a los administradores de sistemas que lo arreglen?)touch *
es por ahora, y veré si puedo averiguar cuál está mal y quizás hablar con el administrador la próxima vez que esté en el sitio.find . -exec touch {} \;
touch
ese puede aceptar múltiples archivos para actuar, puede hacerlo (mucho) de manera más eficiente confind . -exec touch {} +
lo que invocarátouch
con tantos argumentos como sea posible.Por lo general, esto ocurre cuando se construye en un directorio montado en NFS, y los relojes del cliente y el servidor NFS no están sincronizados.
La solución es ejecutar un cliente NTP tanto en el servidor NFS como en todos los clientes.
fuente
Instalar el protocolo de tiempo de red
Esto también me sucedió cuando se ejecuta
make
en un recurso compartido Samba SMB CIFS en un servidor. Una solución duradera consiste en instalar elntp
demonio tanto en el servidor como en el cliente. (Tenga en cuenta que este problema no se resuelve ejecutandontpdate
. Esto resolvería la diferencia horaria solo temporalmente, pero no en el futuro).Para los sistemas derivados de Ubuntu y Debian, simplemente escriba la siguiente línea en la línea de comando:
Además, aún será necesario emitir el comando
touch *
una vez (y solo una vez) en el directorio afectado para corregir los tiempos de modificación del archivo de una vez por todas.Para obtener más información sobre las diferencias entre
ntp
yntpdate
, consulte:fuente
Solución simple:
hará todo bien.
Para más información: http://embeddedbuzz.blogspot.in/2012/03/make-warning-clock-skew-detected-your.html
fuente
Según el usuario m9dhatter en LinuxQuestions.org :
fuente
Las otras respuestas aquí hacen un buen trabajo al explicar el problema, por lo que no repetiré eso aquí. Pero hay una solución que puede resolverlo que aún no aparece en la lista: simplemente ejecute
make clean
, luego vuelva a ejecutarmake
.Hacer que remove elimine los archivos ya compilados evitará que make tenga archivos para comparar las marcas de tiempo, resolviendo la advertencia.
fuente
make clean
usted resolverá los problemas (creando otros).touch
en todos los archivos. Tiene razón en que requerirá una compilación completa, pero si vale la pena o no el tiempo variará dependiendo de sus prioridades y el tamaño del proyecto. No creo que sea exacto decir que "no es una solución real" simplemente porque no es la mejor o tiene algunos inconvenientes. Solucionará el problema; Suena como una solución para mí.make clean
He tenido esto en el pasado, debido a que los relojes estaban en las máquinas. Considere configurar NTP para que todas las máquinas tengan el mismo tiempo.
fuente
Esto generalmente se debe simplemente a tiempos de discrepancia entre sus máquinas host y cliente. Puede intentar sincronizar las horas en sus máquinas usando ntp .
fuente
La solución es ejecutar un cliente NTP, solo ejecute el comando de la siguiente manera
172.16.12.100 es el servidor ntp
fuente
ntpdate
es solo una corrección única. Es mejor instalarlontp
tanto en el servidor como en el cliente para obtener una solución duradera.Reemplace la batería del reloj en su computadora. He visto este mensaje de error cuando la batería que buscaba monedas en la placa base necesitaba ser reemplazada.
fuente
(Por si acaso alguien aterriza aquí) Si tiene derechos de sudo, una opción es sincronizar la hora del sistema
fuente
Haga comprobaciones si el resultado de la compilación, por ejemplo, somefile.o, es anterior a la fuente, por ejemplo, somefile.c. La advertencia anterior significa que algo sobre las marcas de tiempo de los archivos es extraño. Probablemente los relojes del sistema del servidor de la Universidad difieran de su reloj y, por ejemplo, presione a la 1 p.m. un archivo con fecha de modificación a las 2 p.m. Puede ver la hora en la consola escribiendo la fecha.
fuente
Esto me paso a mi. Es porque corrí
make -j 4
y algunos trabajos terminaron fuera de servicio. Se debe esperar esta advertencia al usar la-j
opción.fuente