Uzak Linux makinesinde C ++ derleme - “saat eğriliği algılandı” uyarısı


168

PuTTY ve WinSCP aracılığıyla üniversitemin küçük Linux kümesine bağlıyım, ikincisini kullanarak dosyaları aktarıyorum ve eski ile derleyip çalıştırıyorum. Şu ana kadar yaptığım iş üniversitenin laboratuvarlarında yapıldı, ancak bugün evde ilginç bir uyarı oluşturan bazı çalışmalar yapıyorum.

Tüm bir klasör klasörünü yükledim ve makekomutu çalıştırdıktan sonra bunu son çıktı satırı olarak alıyorum:

make: warning: Saat çarpıklığı algılandı. Yapınız eksik olabilir.

Sonuçta ortaya çıkan ikili dosya düzgün çalışıyor ve derleme işleminde beklenmeyen başka hatalar yok gibi görünüyor.

Bazı yeni / yedek dosyaları yükledikten sonra yapı oluşturarak hatayı tetikleyebiliyor gibi görünüyorum (her şeyi yerel olarak düzenledikten sonra yeni sürümü yükledim), bu yüzden eşleşmeyen dosya değiştirme süreleri kadar basit bir şey olup olmadığını merak ediyorum? Ya da daha fazla ilgili bir şey mi?

Endişelenmeli miyim? Bunu nasıl düzeltebilir / önleyebilirim?


Bazı cevaplarda belirtildiği gibi saat farkları bir olasılıktır. Kopyalamadan önce ve sonra kaynak dosyaların değişiklik zamanlarını karşılaştırabilirsiniz - gün ışığından yararlanma işlemlerini farklı şekilde yapan iki işletim sistemi / dosya sistemi nedeniyle bunların bir saat farklı olduğunu görebilirsiniz.
Steve Jessop

Son bir öneri: Herhangi bir Windows makinem yok, bu yüzden PuTTY ve WinSCP yeteneklerine aşina değilim, ancak genellikle dosya aktarım araçları değiştirilen sürenin korunup korunmadığını kontrol etmenizi sağlayan seçeneklere sahiptir. Mod zamanlarınız açıkça korunur, ancak bunu kapatabilirseniz, dosyalar sisteminize kopyalandığında uzak sistem saatini değil, sistem saatiniz tarafından ayarlanan mod zamanlarını kullanırlar.
MadScientist

Yanıtlar:


207

Bu ileti genellikle bazı dosyalarınızın geçerli sistem saatinden daha geç değiştirme süresine sahip olduğunun bir göstergesidir. Yana makebir kaynak dosyaları kendi nesne dosyasından daha fazla yakın zamanda değiştirilip değiştirilmediğini kontrol ederek artımlı yapı yaparken derlemek hangi dosyaları karar verir, bu durum gereksiz dosyaları inşa edilmesine neden, ya da daha kötüsü, gerekli dosyaları yapabilirsiniz değildir inşa edilecek.

Ancak, sıfırdan inşa ediyorsanız (artımlı bir yapı yapmıyorsanız), bu uyarıyı sonuçsuz olarak göz ardı edebilirsiniz.


4
Kümenin masaüstümün arkasında ~ 3mins zamanı var gibi görünüyor , bu yüzden "gelecekte" değiştirilen dosyalar olası bir neden gibi görünüyor. Bir yapı yüklemeden önce bir şey yükledikten sonra 5 dakika kadar beklemek en güvenli bahis midir? Beklemek istemem, bu yüzden sorunu önlemek için herhangi bir yüklenen "gelecekteki" dosyalarda süreleri sıfırlamanın bir yolu var mı?
DMA57361

14
@ DMA57361: touch *mtimes değerini güncel saate güncelleyecektir. Alternatif olarak, masaüstünüzde NTP'yi saatinizi senkronize etmek için etkinleştirebilirsiniz (Uni'nin makinesinde değil, masaüstünüzün yanlış olduğunu varsayarsak ... eğer ikincisi, sistem yöneticilerinden düzeltmesini isteyebilirsiniz?)
caf

2
Bunun için teşekkürler, touch *şimdilik, ve hangisinin yanlış olduğunu bulabilir miyim ve sitede bir dahaki sefere yönetici adamla bir kelime olabilir göreceğim.
DMA57361

1
Benim durumumda özyinelemeli bir dokunuşa ihtiyacım vardı:find . -exec touch {} \;
ams

8
@AaronS gibi komutlar için touchbirden fazla dosyayı kabul etmeyi kabul edebilir , mümkün olduğunca çok argümanla find . -exec touch {} +çağıracak (çok) daha verimli bir touchşekilde yapabilirsiniz.
Viktor Dahl

56

Genellikle bu, NFS bağlantılı bir dizin oluştururken oluşur ve istemci ve NFS sunucusundaki saatler eşitlenmez.

Çözüm, hem NFS sunucusunda hem de tüm istemcilerde bir NTP istemcisi çalıştırmaktır.


1
Ben NFS monte edilmiş dir üzerine inşa etmiyorum.
kingsmasher1

Bu tür bir uyarıyı bastırmak için bazı ipuçları verebilir misiniz, çünkü yürütmede veya sonuçlarda gerçekten bir fark yaratmaz.
kingsmasher1

@ kingsmasher1: İlgili tüm makinelerde bir NTP istemcisi çalıştırın.
janneb

Az önce hedefimi kontrol ettim. Tarih ayarlanmadı. Burada NTP'nin nasıl çalıştırılacağından emin değilim. Tarihi güncellersem sorun olmaz mı? Oluşturduğum x86, geçerli tarihe ayarlandı, ancak hedefim (i yürüttüğüm) soem 1970'lerin bir tarihine sahip.
kingsmasher1

1
Sorun sıralanmıştır. Hedef tarihimi şimdiki tarihe değiştirdim ve uyarı kayboldu. Sorun şu ki: Hedef tarih, çalıştırılabilir tarihten daha eski bir tarihse, sorun ortaya çıkar.
kingsmasher1

23

Ağ Zaman Protokolünü Yükleme

makeBir sunucuda Samba SMB CIFS paylaşımında çalışırken bu da bana oldu . Kalıcı bir çözüm, ntparka plan sunucusunun hem sunucuya hem de istemciye yüklenmesinden oluşur . (Lütfen, bu sorunun çalıştırılarak çözülmediğini unutmayın ntpdate. Bu, zaman farkını sadece geçici olarak çözer, ancak gelecekte çözmez.)

Ubuntu ve Debian kaynaklı sistemler için, komut satırına aşağıdaki satırı yazmanız yeterlidir:

$ sudo apt install ntp

Dahası, touch *dosya değiştirme zamanlarını bir kez ve herkes için düzeltmek için etkilenen dizinde komutu bir kez (ve sadece bir kez) yayınlamanız gerekir .

$ touch *

Arasındaki farklar hakkında daha fazla bilgi için ntpve ntpdate, bakınız:



6

LinuxQuestions.org üzerindeki m9dhatter kullanıcısına göre :

"make", derlemeye çalıştığı dosyanın eski veya yeni olup olmadığını belirlemek için dosyanın zaman damgasını kullanır. Eğer saatiniz paramparça olursa derleme problemleri olabilir.

başka bir makinedeki dosyaları birkaç saat önde olan bir saatte değiştirmeye çalışırsanız ve bunları makinenize aktarırsanız ve derlemeye çalışırsanız, dosyanın gelecekten değiştirildiğini söyleyen bir uyarı gelebilir. saat çarpık veya bu yönde bir şey olabilir (gerçekten hatırlayamıyorum). sadece rahatsız edici dosyaya ls ve bunu yapabilir:

#touch <sorunlu dosyanın dosya adı>


6

Buradaki diğer cevaplar sorunu açıklamak için iyi bir iş çıkar, bu yüzden burada tekrar etmeyeceğim. Ancak henüz çözülemeyen bir çözümü çözebilir: basitçe çalıştırın make clean, sonra tekrar çalıştırın make.

Zaten derlenmiş dosyaların kaldırılmasını sağlamak, zaman damgalarını karşılaştırmak için herhangi bir dosyaya sahip olmanızı engelleyerek uyarıyı çözecektir.


Bu gerçek bir çözüm değildir: derleyici her şeyi derlemek için 30 dakikaya ihtiyaç duyuyorsa ve tek bir dosya üzerinde çalışıyorum (yalnızca derlemenin 2 saniyeye ihtiyacı olduğu yerde). büyük kütüphane. Sağ? Ancak evet, make cleansizinle sorunları çözecek (başkalarını yaratarak).
Leos313

@ Leos313 Sadece benim için işe yarayanı paylaşıyorum. Bir okul ağında kök izinlerine sahip olmadığım için karşılaştım, bu yüzden NTP'yi kuramadım ve sadece touchtüm dosyalar üzerinde kullanmanın derleme sonuçlarına güvenmedim . Tam bir yeniden derleme gerektireceğinden haklısınız, ancak zaman ayırmaya değer olup olmadığı önceliklerinize ve proje boyutunuza bağlı olarak değişecektir. Sadece en iyi olmadığı veya bazı dezavantajları olduğu için "gerçek bir çözüm değil" demenin doğru olduğunu düşünmüyorum. Sorunu düzeltir; Bana bir çözüm gibi geliyor.
skrrgwasme

Oy vermedim :) başkalarını yaratarak sorunu çözer. Bundan daha fazlası yok! :) emin cevap çoğu durumda yardımcı olacaktır ve burada olmaya değer! Altını çizmek istediğim şey ve bazen uyarı ile kalmak, make clean
koşmaktan

4

Bu geçmişte oldu - saatler makinelerde olması nedeniyle. Tüm makinelerin aynı zamana sahip olması için NTP'yi kurmayı düşünün.


2

Bunun nedeni genellikle ana makineniz ile istemci makineleriniz arasındaki uyumsuzluk süresidir. Ntp kullanarak makinelerinizdeki saatleri senkronize etmeyi deneyebilirsiniz .


1

Çözüm bir NTP istemcisi çalıştırmak, sadece aşağıdaki komutu çalıştırın

#ntpdate 172.16.12.100

172.16.12.100 ntp sunucusudur


2
Stack Overflow'a hoş geldiniz! Gönderiniz için teşekkürler! Lütfen yayınlarınızda imza / kısa açıklama kullanmayın. Kullanıcı kutunuz imzanız olarak kabul edilir ve profilinizi kullanarak kendiniz hakkında istediğiniz bilgileri göndermek için kullanabilirsiniz. İmzalar / sloganlar hakkında SSS
Andrew Barber

Kullanmak ntpdatesadece bir kerelik bir düzeltme. ntpKalıcı bir çözüm elde etmek için hem sunucuya hem de istemciye yüklemek daha iyidir .
Serge Stroobandt

1

Bilgisayarınızdaki saat pilini değiştirin. Bu hata mesajını anakarttaki bozuk paraya benzeyen pilin değiştirilmesi gerektiğinde gördüm.


1

(Herhangi birinin buraya gelmesi durumunda) Sudo haklarınız varsa, bir seçenek sistem saatini senkronize etmektir

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

-1

Derlemenin sonucunun, örn. Somefile.o kaynağından daha eski olup olmadığını kontrol edin, örn. Somefile.c. Yukarıdaki uyarı, dosyaların zaman damgalarıyla ilgili bir şeyin garip olduğu anlamına gelir. Muhtemelen Üniversite sunucusunun sistem saatleri saatinizden farklıdır ve örneğin saat 14: 00'de değişiklik tarihine göre 14: 00'de bir dosyayı itersiniz. Tarihi yazarak konsoldaki saati görebilirsiniz.


-3

Bu bana oldu. Çünkü kaçtım make -j 4ve bazı işler düzensizleşti. Bu uyarı -jseçeneği kullanılırken beklenmelidir .


5
İşler tamamlanmadı. Değişiklik sürelerinin gelecekte olması gerektiği anlamına gelmez.
klimkin

@klimkin Neden olmasın? Bazı işlemcilerin diğer işlemciler başlamadan önce bileşenleri oluşturmayı bitirdiğini düşünüyorum.
kilojoules
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.