दूरस्थ लिनक्स मशीन पर C ++ संकलित करना - "घड़ी तिरछा पता लगाया गया" चेतावनी


168

मैं अपने विश्वविद्यालय के छोटे लिनक्स क्लस्टर से PuTTY और WinSCP के माध्यम से जुड़ा हुआ हूं, बाद वाली फ़ाइलों का उपयोग करके फ़ाइलों को स्थानांतरित करना और उन्हें संकलित करना और उन्हें पूर्व में चलाना। मेरा काम अब तक विश्वविद्यालय की प्रयोगशालाओं में प्रदर्शन किया गया है, लेकिन आज मैं घर पर कुछ काम कर रहा हूं जिससे एक दिलचस्प चेतावनी उत्पन्न हुई।

मैंने सामान का एक संपूर्ण फ़ोल्डर अपलोड किया और, makeकमांड चलाने पर , मुझे यह आउटपुट की अंतिम पंक्ति के रूप में मिलता है:

बनाओ: चेतावनी: घड़ी तिरछा पता चला। आपका निर्माण अपूर्ण हो सकता है।

परिणामस्वरूप बाइनरी सही तरीके से काम करती है, और निर्माण प्रक्रिया में कोई अन्य अप्रत्याशित त्रुटियां नहीं लगती हैं।

मुझे लगता है कि कुछ नई / प्रतिस्थापन फ़ाइलों को अपलोड करने के बाद बिल्डिंग को त्रुटि को ट्रिगर करने में सक्षम हो सकता है (मैं स्थानीय रूप से सब कुछ संपादित करता हूं फिर नया संस्करण अपलोड करता हूं), इसलिए मैं सोच रहा हूं कि क्या यह कुछ बेमेल फ़ाइल संशोधन समय की तरह सरल है? या कुछ और विषय?

तो, क्या मुझे चिंतित होना चाहिए? मैं इसे कैसे ठीक / रोकूं?


घड़ी के अंतर एक संभावना है, जैसा कि कुछ उत्तरों में उल्लेख किया गया है। आप प्रतिलिपि बनाने से पहले और बाद में स्रोत फ़ाइलों के संशोधन समय की तुलना भी कर सकते हैं - आप पा सकते हैं कि वे दो OSes / filesystems के कारण एक घंटे अलग हैं जो दिन की बचत का अलग तरीके से उपचार करते हैं।
स्टीव जेसप

एक अंतिम सुझाव: मेरे पास कोई विंडोज मशीन नहीं है, इसलिए मैं PuTTY और WinSCP की क्षमताओं से परिचित नहीं हूं, लेकिन अक्सर फ़ाइल स्थानांतरण टूल में विकल्प होते हैं जो आपको नियंत्रित करने की अनुमति देते हैं कि संशोधित समय संरक्षित है या नहीं। आपके मॉड समय स्पष्ट रूप से संरक्षित हैं, लेकिन अगर आप उस समय को बंद कर सकते हैं, तो जब फ़ाइलों को आपके सिस्टम में कॉपी किया जाता है, तो वे आपके सिस्टम घड़ी द्वारा सेट किए गए मॉड समय का उपयोग करेंगे, न कि रिमोट सिस्टम घड़ी का।
MadScientist

जवाबों:


206

वह संदेश आमतौर पर एक संकेत है कि आपकी कुछ फ़ाइलों में वर्तमान सिस्टम समय की तुलना में बाद में संशोधन किया गया है। चूँकि यह makeतय करना है कि किसी स्रोत फ़ाइल को उसकी ऑब्जेक्ट फ़ाइल से अधिक हाल ही में संशोधित किया गया है या नहीं, तो जाँच करके एक वृद्धिशील निर्माण करते समय कौन सी फाइलों को संकलित किया जाए, इस स्थिति के कारण अनावश्यक फ़ाइलों का निर्माण किया जा सकता है, या बदतर, आवश्यक फ़ाइलों का निर्माण नहीं किया जा सकता है।

हालांकि, यदि आप खरोंच से निर्माण कर रहे हैं (वृद्धिशील निर्माण नहीं कर रहे हैं) तो आप परिणाम के बिना इस चेतावनी को अनदेखा कर सकते हैं।


4
ऐसा लगता है कि मेरे डेस्कटॉप के पीछे क्लस्टर का समय ~ 3mins है , इसलिए "भविष्य" में संशोधित की गई फ़ाइलों का एक संभावित कारण लगता है। क्या बिल्ड चलाने से पहले कुछ भी अपलोड करने के बाद 5mins या तो इंतजार करना सबसे सुरक्षित शर्त है? मुझे प्रतीक्षा करने की आवश्यकता नहीं है, इसलिए क्या समस्या से बचने के लिए किसी भी अपलोड की गई "भविष्य" फ़ाइलों पर समय को रीसेट करने का कोई तरीका है?
DMA57361

14
@ DMA57361: touch *वर्तमान समय के लिए mtimes अद्यतन करेगा। वैकल्पिक रूप से आप एनटीपी को अपनी घड़ी को सिंक करने के लिए अपने डेस्कटॉप पर सक्षम कर सकते हैं (यह मानते हुए कि यह आपका डेस्कटॉप गलत है, और यूनी की मशीन नहीं है ... यदि बाद वाला, शायद इसे ठीक करने के लिए सिसडमिंस से पूछें?)
कैफे

2
इसके लिए धन्यवाद, touch *यह अभी के लिए है, और मैं देखूंगा कि क्या मुझे पता चल सकता है कि क्या गलत है और शायद अगली बार जब मैं साइट पर हूं तो एडमिन लड़के के साथ एक शब्द होगा।
DMA57361

1
मैं मेरे मामले में एक पुनरावर्ती स्पर्श की जरूरत:find . -exec touch {} \;
एम्स

8
@AaronS इस तरह के आदेशों के लिए touchकई फ़ाइलों को स्वीकार करने के लिए कार्य कर सकते हैं, आप इसे (बहुत) अधिक कुशलता से कर सकते हैं find . -exec touch {} +जिसके touchसाथ संभव के रूप में कई तर्कों के साथ आह्वान करेंगे।
विक्टर डाहल

56

आमतौर पर ऐसा तब होता है जब एनएफएस माउंटेड डायरेक्टरी में निर्माण होता है, और क्लाइंट और एनएफएस सर्वर पर घड़ियां सिंक से बाहर हो जाती हैं।

समाधान एनएफएस सर्वर और सभी क्लाइंट पर एनटीपी क्लाइंट चलाने के लिए है।


1
मैं किसी एनएफएस माउंटेड डीआईआर पर निर्माण नहीं कर रहा हूं।
kingsmasher1 10

मुझे पता है कि अगर आप इस तरह की चेतावनी को दबाने के लिए कुछ सुझाव दे सकते हैं, क्योंकि यह वास्तव में निष्पादन या परिणामों में कोई अंतर नहीं करता है।
kingsmasher1

@ kingsmasher1: इसमें शामिल सभी मशीनों पर एक NTP क्लाइंट चलाएं।
जनाब

मैंने सिर्फ अपना टारगेट चेक किया। तिथि निर्धारित नहीं है। मुझे यकीन नहीं है कि यहां एनटीपी कैसे चलाया जाए। क्या यह ठीक है, अगर मैं तारीख को अपडेट करूं? मेरा x86 जहां मैं बनाता है, वर्तमान तिथि पर सेट है, लेकिन मेरे लक्ष्य (जहां मैं निष्पादित करता हूं) में 1970 की तारीख है।
kingsmasher1

1
समस्या हल है। मैंने अपनी लक्षित तिथि को वर्तमान तिथि में बदल दिया और चेतावनी गायब हो गई। तो समस्या यह है: यदि निष्पादन की तारीख की तुलना में लक्ष्य तिथि पीछे की तारीख है, तो समस्या होती है।
kingsmasher1

22

नेटवर्क टाइम प्रोटोकॉल स्थापित करें

makeएक सर्वर पर सांबा एसएमबी सीआईएफएस शेयर पर चलने पर मेरे साथ भी ऐसा हुआ । एक टिकाऊ समाधान ntpसर्वर और क्लाइंट दोनों पर डेमॉन स्थापित करने में शामिल है। (कृपया ध्यान दें कि इस समस्या को हल करने से हल नहीं ntpdateहोता है। यह समय के अंतर को केवल अस्थायी रूप से हल करेगा, लेकिन भविष्य में नहीं।)

उबंटू और डेबियन-व्युत्पन्न सिस्टम के लिए, कमांड लाइन पर निम्नलिखित लाइन टाइप करें:

$ sudo apt install ntp

इसके अलावा, एक को अभी भी एक touch *बार और सभी के लिए फ़ाइल संशोधन समय को सही करने के लिए प्रभावित निर्देशिका में एक बार (और केवल एक बार) आदेश जारी करने की आवश्यकता होगी ।

$ touch *

ntpऔर के बीच अंतर के बारे में अधिक जानकारी के लिए ntpdate, कृपया देखें:



6

LinuxQuestions.org पर उपयोगकर्ता m9dhatter के अनुसार :

"मेक" फाइल के टाइम स्टैम्प का उपयोग यह निर्धारित करने के लिए करता है कि यह जिस फाइल को संकलित करने की कोशिश कर रहा है वह पुरानी है या नई। अगर आपकी घड़ी को मजबूत बनाया गया है, तो उसे समस्याएँ खड़ी हो सकती हैं।

यदि आप किसी अन्य मशीन में क्लॉक टाइम के साथ कुछ मिनटों के बाद फ़ाइलों को संशोधित करने और उन्हें अपनी मशीन में स्थानांतरित करने का प्रयास करते हैं और फिर संकलन करने का प्रयास करते हैं, तो यह चेतावनी चेतावनी दे सकती है कि फ़ाइल भविष्य से संशोधित की गई थी। घड़ी तिरछी या उस प्रभाव के लिए कुछ हो सकती है (वास्तव में याद नहीं कर सकते)। आप बस अपमानजनक फ़ाइल को ls कर सकते हैं और यह कर सकते हैं:

#touch <फ़ाइल का अपमान करने का फ़ाइल नाम>


6

अन्य उत्तर यहाँ समस्या को स्पष्ट करने का अच्छा काम करते हैं, इसलिए मैं इसे यहाँ नहीं दोहराऊँगा। लेकिन एक समाधान है जो इसे हल कर सकता है जो अभी तक सूचीबद्ध नहीं है: बस चलाएं make clean, फिर पुन : चलाएँ make

किसी भी पहले से संकलित फ़ाइलों को हटाने से किसी भी फाइल को होने से रोकने के लिए समयसीमा की तुलना करने से रोकना होगा, चेतावनी को हल करना।


यह एक वास्तविक समाधान नहीं है: यदि कंपाइलर को सब कुछ संकलित करने के लिए 30 मिनट की आवश्यकता है और मैं एक फाइल पर काम कर रहा हूं (जहां बिल्ड को केवल 2 सेकंड की आवश्यकता है) मैं एक दिन के एक हिस्से पर संशोधन करने के लिए पूरे दिन बर्बाद करने जा रहा हूं विशाल पुस्तकालय। सही? हालाँकि, हाँ, make cleanआप मुद्दों को हल करेंगे (दूसरों को बनाकर)।
Leos313

@ Leos313 मैं सिर्फ वही साझा कर रहा हूं जो मेरे लिए काम करता है। मैंने इसे एक स्कूल नेटवर्क पर सामना किया, जिसमें मेरे पास रूट अनुमतियां नहीं थीं, इसलिए मैं NTP सेट नहीं कर सका, और मैंने touchसभी फ़ाइलों का उपयोग करने के संकलन परिणामों पर भरोसा नहीं किया । आप सही कह रहे हैं कि इसके लिए एक पूर्ण पुनर्संयोजन की आवश्यकता होगी, लेकिन समय के लायक है या नहीं यह आपकी प्राथमिकताओं और परियोजना के आकार के आधार पर अलग-अलग होगा। मुझे नहीं लगता कि यह कहना सही है कि यह "वास्तविक समाधान नहीं है" सिर्फ इसलिए कि यह सबसे अच्छा नहीं है या इसमें कुछ कमियां हैं। यह समस्या को ठीक कर देगा; मेरे लिए एक समाधान की तरह लगता है।
skrrgwasme

मैंने वोट नहीं दिया :) यह दूसरों को बनाकर समस्या का हल करता है। इससे ज्यादा कुछ नहीं! :) यह सुनिश्चित करने के लिए कि उत्तर अधिकांश स्थिति में मदद करेगा और यह यहाँ रहने लायक है! मैं क्या रेखांकित करना चाहता हूं और, कभी-कभी, यह चेतावनी के साथ चलने से बेहतर है किmake clean
Leos313

4

मैंने अतीत में ऐसा किया है - घड़ियों के मशीनों पर होने के कारण। NTP स्थापित करने पर विचार करें ताकि सभी मशीनों का समय समान हो।


2

यह आमतौर पर आपके मेजबान और ग्राहक मशीनों के बीच बेमेल समय के कारण होता है। आप ntp का उपयोग करके अपनी मशीनों पर समय को सिंक्रनाइज़ करने का प्रयास कर सकते हैं ।


1

समाधान एक NTP क्लाइंट को चलाने के लिए है, बस नीचे के रूप में कमांड चलाएं

#ntpdate 172.16.12.100

172.16.12.100 ntp सर्वर है


2
ढेर अतिप्रवाह में आपका स्वागत है! आपकी पोस्ट के लिए धन्यवाद! कृपया अपने पोस्ट में हस्ताक्षर / टैगलाइन का उपयोग न करें। आपका उपयोगकर्ता बॉक्स आपके हस्ताक्षर के रूप में गिना जाता है, और आप अपनी प्रोफ़ाइल का उपयोग अपने बारे में किसी भी जानकारी को पोस्ट करने के लिए कर सकते हैं। हस्ताक्षर / टैगलाइन पर अक्सर पूछे जाने वाले प्रश्न
एंड्रयू बार्बर

उपयोग करना ntpdateकेवल एक बंद सुधार है। ntpटिकाऊ समाधान प्राप्त करने के लिए सर्वर और क्लाइंट दोनों पर इंस्टॉल करना बेहतर है ।
सर्ज स्ट्रोबंड

1

अपने कंप्यूटर में घड़ी की बैटरी बदलें। मैंने यह त्रुटि संदेश तब देखा है जब मदरबोर्ड पर सिक्का दिखने वाली बैटरी को बदलने की आवश्यकता थी।


1

(यदि किसी के यहाँ भूमि हो तो) यदि आपके पास sudo का अधिकार है तो एक विकल्प सिस्टम समय को सिंक्रनाइज़ करना है

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

-1

जाँच करें कि क्या संकलन का परिणाम, जैसे somefile.o, स्रोत से पुराना है, जैसे somefile.c। ऊपर चेतावनी का मतलब है कि फाइलों के टाइमस्टैप के बारे में कुछ अजीब है। संभवतः विश्वविद्यालय सर्वर की सिस्टम क्लॉक आपकी घड़ी से भिन्न होती है और आप उदाहरण के लिए दोपहर 1 बजे एक फाइल को संशोधन की तारीख 2 बजे के साथ आगे बढ़ाते हैं। आप कंसोल पर दिनांक टाइप करके समय देख सकते हैं।


-3

यह मेरे साथ हुआ। यह इसलिए है क्योंकि मैं भाग गया था make -j 4और कुछ नौकरियां ऑर्डर से बाहर हो गईं। -jविकल्प का उपयोग करते समय इस चेतावनी की अपेक्षा की जानी चाहिए ।


5
नौकरियां खत्म हो जाना ठीक है। इसका मतलब यह नहीं है कि भविष्य में उनका संशोधन समय होना चाहिए।

@klimkin क्यों नहीं? मुझे लगता है कि कुछ प्रोसेसर ने अन्य प्रोसेसर शुरू करने से पहले घटकों का निर्माण किया।
किलोजूल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.