बिल्ड पर गुम .pch फ़ाइल को कैसे ठीक करें?


164

जब मैं दृश्य स्टूडियो में अपने c ++ समाधान का निर्माण करता हूं तो यह शिकायत करता है कि xxxxx.pch फ़ाइल गायब है। क्या कोई सेटिंग है जिसे मैं पूर्व संकलित हेडर वापस पाने के लिए याद कर रहा हूं?

यहाँ पूर्णता के लिए सटीक त्रुटि है:

Error   1   fatal error C1083: Cannot open precompiled header file: 'Debug\xxxxx.pch': No such file or directory

1
आपको अधिक जानकारी प्रदान करनी होगी। आपको क्या त्रुटि हो रही है? वर्तमान में आपकी परियोजना कैसे कॉन्फ़िगर की गई है?
असफ लवी

बस एक साधारण पुनर्निर्माण ने मेरी समस्या को ठीक कर दिया।
Deqing

जवाबों:


436

नोट: IDE के बाद के संस्करण संबंधित फ़ाइलों के लिए डिफ़ॉल्ट नामों में "stdafx" के बजाय "pch" का उपयोग कर सकते हैं। नीचे दिए गए निर्देशों में stdafx के लिए pch स्थानापन्न करना आवश्यक हो सकता है। मैं क्षमाप्रार्थी हूं। यह मेरी गलती नहीं है।

  1. समाधान एक्सप्लोरर में अपनी परियोजना पर राइट-क्लिक करें।
  2. ड्रॉप-डाउन मेनू के नीचे गुण पर क्लिक करें।
  3. गुण पृष्ठ के शीर्ष पर, ड्रॉप-डाउन मेनू से सभी कॉन्फ़िगरेशन चुनें।
  4. C / C ++ ट्री खोलें और Precompiled Headers चुनें
  5. Precompiled शीर्ष लेख: चयन का उपयोग करें (/ यू)
  6. Precompiled Header File फ़ील्ड में भरें। मानक stdafx.h है
  7. ठीक पर क्लिक करें

  8. यदि आप अपने हैडर फ़ाइलों में stdafx.h नहीं है, तो इसे वहाँ रखें। इसे उन सभी शीर्षकों को संपादित करें जिन्हें आप पहले से चाहते हैं।

  9. अपने प्रोजेक्ट में stdafx.cpp नाम की एक फ़ाइल डालें। इसके शीर्ष पर #include "stdafx.h" लगाएं, और कुछ नहीं।
  10. समाधान एक्सप्लोरर में stdafx.cpp पर राइट-क्लिक करें। चरण 4 में फिर से गुण और सभी कॉन्फ़िगरेशन चुनें ...
  11. ... लेकिन इस बार Precompiled Header Create (/ Yc) चुनें। यह केवल एक फ़ाइल stdafx.cpp को बांध देगा।
  12. अपने सभी स्रोत फ़ाइलों के शीर्ष पर #include "stdafx.h" रखें।

भाग्यशाली 13. अपनी उंगलियों को पार करें और बिल्ड बनाएं।


58
मुझे नहीं पता था कि stdafx.cpp की अलग सेटिंग होनी चाहिए। बहुत बढ़िया जवाब।
विशेषज्ञ

5
यह स्वीकृत उत्तर होना चाहिए, क्योंकि दूसरा चरण 10 और 11 गायब है। धन्यवाद!
जेबेंटली

2
यह मेरी तुलना में अधिक मूल उत्तर है। PCH काम करने के लिए चरण 1-7 आवश्यक हैं, लेकिन प्रश्न से त्रुटि संदेश इंगित करता है कि चरण पहले ही किए जा चुके हैं। OTOH, यह एक एकल stdafx.pchफ़ाइल को मानता है , जबकि xxxxx.pchप्रश्न से अधिक जटिल समस्या (मल्टी-पीसीएच सेटअप) पर संकेत देता है।
MSalters

1
इस जवाब ने वास्तव में दिन बचा लिया। धन्यवाद।
मैट क्रेग

धन्यवाद महोदय! एक नई परियोजना के लिए मेरी C / C ++ r जड़ों पर वापस जा रहा हूं और मुझे एक स्पैज जैसा महसूस हो रहा है
Colby Africa

59

Precompiled Header (pch) उपयोग दो चरणों वाली प्रक्रिया है।

चरण एक में, आप एक स्टब फ़ाइल संकलित करते हैं (वीएस 200 एक्स में इसे आमतौर पर कहा जाता है stdafx.cpp। नए संस्करण उपयोग करते हैं pch.cpp।)। इस स्टब फ़ाइल में अप्रत्यक्ष रूप से केवल वे हेडर शामिल हैं, जिन्हें आप पहले से चाहते हैं। आमतौर पर, एक छोटे हेडर (आमतौर पर stdafx.hया pch.hpp) मानक हेडर को सूचीबद्ध करता है जैसे <iostream>और <string>, और फिर इसे स्टब फ़ाइल में शामिल किया जाता है। इसे कंपाइल करने से .pch फाइल बनती है।

चरण 2 में, आपके वास्तविक स्रोत कोड में पहले हेडर के रूप में चरण 1 से एक ही छोटा हेडर शामिल है। संकलक, जब यह इस विशेष शीर्ष लेख का सामना करता है, तो इसके बजाय .pch फ़ाइल पढ़ता है। इसका मतलब है कि यह (री) उन मानक हेडर को हर बार संकलित नहीं करता है।

आपके मामले में, यह चरण 1 विफल लगता है। स्टब फ़ाइल अभी भी मौजूद है? आपके मामले में, शायद यही होगा xxxxx.cpp। यह एक ऐसी फ़ाइल होनी चाहिए /Yc:xxxxx.pch, जिसके साथ संकलित किया गया हो , यह इंगित करने के लिए कि यह PCH प्रक्रिया का चरण 1 है। यदि xxxxx.cppमौजूद है, और इस तरह की एक स्टब फ़ाइल है, तो यह संभवतः इसके /Yc:संकलक विकल्प को याद कर रहा है।


13
तब यह शायद अपने / Yc: संकलक विकल्प को याद कर रहा है। वैसे विकल्प प्रोजेक्ट प्रॉपर्टी पेज / कॉन्फ़िगरेशन प्रॉपर्टीज / C-C ++ / Precompiled Headers में स्थित है
wip

22

ठीक कर:

  1. सुनिश्चित करें कि आपके पास अपने प्रोजेक्ट में xxxxx.cpp है

  2. संकलन करें xxxxx.cpp / Yc फ्लैग के साथ ( Precompiled Header बनाएँ )
    (xxxxx.cpp पर राइट क्लिक करें -> गुण -> Precompiled Headers -> create )

  3. अन्य सभी फाइलों को / यू फ्लैग ( प्रीक्लेम्ड हैडर का उपयोग करें ) के साथ संकलित करें
    (प्रोजेक्ट पर राइट क्लिक करें -> प्रॉपर्टीज -> प्रिकॉम्स्ड हेडर -> उपयोग )


इसने मुझे ठीक कर दिया। आपका बहुत बहुत धन्यवाद!
चार्ल्स जू

7
  1. प्रोजेक्ट पर राइट क्लिक करें और प्रॉपर्टी मेनू आइटम चुनें
  2. गोटो सी / सी ++ -> पूर्वनिर्धारित हेडर
  3. Precompiled Headers का उपयोग नहीं का चयन करें

इसने मेरे लिए काम किया। मैंने "stdafx.cpp" को हटा दिया था, तब जब मैंने इसे वापस जोड़ा, तो यह त्रुटि तब तक दूर नहीं होगी जब तक कि मैं पूर्वनिर्मित हेडर बंद नहीं कर देता। यह परियोजना वैसे भी छोटी है, इसलिए इसकी गति पर बहुत फर्क नहीं पड़ता।
कंटैंगो सेप

3
4. चयन करेंCreate (/Yc) (पुनर्स्थापित करने और फिर इसे फिर से उपयोग करने के लिए)
Bitterblue

2

हां, इसे / Yc विकल्पों के साथ समाप्त किया जा सकता है, जैसे कि अन्य लोगों ने बताया है, लेकिन सबसे अधिक संभावना है कि इसे ठीक करने के लिए आपको इसे छूने की आवश्यकता नहीं होगी। बिना किसी सेटिंग में बदलाव किए आपको पहली बार में यह त्रुटि क्यों हो रही है? आप इस परियोजना को 'साफ' कर सकते हैं और एकल सीपीपी फ़ाइल संकलित करने की कोशिश कर सकते हैं। आपको यह त्रुटि उस स्थिति में प्राप्त होगी क्योंकि precompiler हैडर अब गायब है। बस पूरी परियोजना का निर्माण (भले ही असफल हो) और किसी भी एक cpp फ़ाइल का निर्माण करने से और आपको यह त्रुटि नहीं मिलेगी।


2

मामले में यह आपके लिए एक सर्वर बिल्ड (AppCenter) पर हो रहा है और कोकोआपोड्स का उपयोग करके यो uaer यह सुनिश्चित करता है कि आपका पॉडफाइल चेक किया गया है।

AppCenter केवल "पॉड इंस्टॉल" कमांड चलाता है यदि यह एक Pofile पाता है और यह फ़ाइलों पर PODS फ़ोल्डर नहीं ढूँढता है।

मेरे पास फ़ोल्डर चेक-इन था, लेकिन क्योंकि git स्वचालित रूप से .pch फ़ाइलों को अनदेखा करता है (आप इसे देखें। इसे बहुत अधिक बताएं), मेरी .pch weren'nt में चेक किया जा रहा है।

मैंने .pch फ़ाइलों को जांचने के लिए मजबूर करके अपनी समस्या को हल किया, लेकिन PODS फ़ोल्डर को हटाना भी काम करना चाहिए, क्योंकि Appcenter उस मामले में पॉड इंस्टॉल कमांड चलाएगा।

ख़ुशी से यह किसी की मदद करता है।


0

यदि सब कुछ सही है, लेकिन यह गलती मौजूद है, तो उसे **** में अगले अनुभाग की जांच करनी होगी। vcxproj फ़ाइल:

<ClCompile Include="stdafx.cpp">
  <PrecompiledHeader Condition=

मेरे मामले में यह एक विन्यास का गलत नाम था: केवल पहला शब्द।


0

मुझे पता है कि यह विषय बहुत पुराना है, लेकिन मैं हाल ही में VS2015 में इससे निपट रहा था और बिल्ड फ़ोल्डरों को हटाने और इसे फिर से बनाने में मदद की थी। ऐसा हो सकता है कि भवन बनाते समय प्रोग्राम या प्रोग्राम को बंद करने / फ्रीजिंग वीएस को बंद करने की कोशिश के कारण हुआ हो।


हां, लेकिन मूल प्रश्न VS2008 के साथ करना था, VS2015 नहीं। क्या आपके पास कोई निश्चितता है कि इससे ओपी की समस्या का समाधान होगा?
टी-हेरॉन

भले ही यह वीएस संस्करण क्या है, समस्या अभी भी विभिन्न बिल्ड्स में होती है। बस कोशिश करें और देखें कि क्या यह आपके साथ काम करने वाले के लिए काम करता है।
ग्लवर 12

0

मैं iOS PCH फाइल की खोज कर रहा था, अगर आपको भी मेरी तरह ही यहाँ मिला, तो जो समाधान मुझे मिला है, वह व्युत्पन्न डेटा को साफ़ करना है; बंद सिम्युलेटर (ओं), xCode Prefs पर जाएँ -> स्थान -> व्युत्पन्न डेटा फ़ाइल पथ पर जाएँ, xCode बंद करें, व्युत्पन्न डेटा फ़ोल्डर में फ़ाइलों को हटाएं, लॉन्च करें और चीयर्स करें :)


-1

बिल्ड> क्लीन सॉल्यूशन आजमाएं, फिर बिल्ड> बिल्ड सॉल्यूशन। यह मेरे लिए काम करता है।

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