सी मानक पुस्तकालय हेडर के लिए ग्रहण सीडीटी के साथ "अनट्रेस किए गए समावेश" त्रुटि


96

मैंने ग्रहण के लिए सीडीटी की स्थापना की और एक सरल हैलो वर्ल्ड सी प्रोग्राम लिखा:

#include <stdio.h>

int main(void){
    puts("Hello, world.");
    return 0;
}

कार्यक्रम सही ढंग से बनाता है और चलाता है, लेकिन ग्रहण इस पीले प्रश्न चिह्न को शामिल किए जाने के बयान के माध्यम से दिखाता रहता है जो कहता है कि "Unresolved inclusion: <stdio.h>"जब मैं इसके साथ माउस डालता हूं।

यह कार्यक्रम को चलाने को प्रभावित नहीं करता है, लेकिन मुझे लगता है कि यह कष्टप्रद है।

क्या किसी को कोई विचार है कि इसे कैसे निकालना है?


2
आपको लगता होगा कि हैलो वर्ल्ड उदाहरण आपके लिए ऐसा करेगा, या कम से कम कुछ मदद प्रदान करेगा। यदि ग्रहण में संकलक शामिल नहीं है, तो यह क्यों नहीं है?
डग मोलिनक्स

जवाबों:


50

संकलक ग्रहण का उपयोग प्रतीकों को ठीक हल करने में सक्षम है, इसलिए कोड ठीक संकलन करेगा।

लेकिन कोड-पूरा / अनुक्रमणिका या प्रीप्रोसेसर ग्रहण का उपयोग कर रहा है पता नहीं कहाँ stdio.hमौजूद है।

आपको फ़ाइल सिस्टम पथ को निर्दिष्ट करने की आवश्यकता है जहां stdio.hस्थित है।

ग्रहण के दस्तावेज संकलक के लिए कई खंडों में इसका वर्णन करते हैं:

और यदि कोड-पूरा / अनुक्रमणिका या प्रीप्रोसेसर विशेष रूप से भी नहीं मिल सकता है stdio.h:

के लिए सटीक स्थान stdio.hउस सिस्टम पर निर्भर करेगा, जिसके लिए आप कोड लिखना चाहते हैं। यदि आप उसी सिस्टम के लिए कोड लिख रहे हैं जिस पर आप एक्लिप्स चला रहे हैं, तो मानक स्थान /usr/include/stdio.hलिनक्स, मैकओएस, सिओविन, आदि के लिए है।

यदि आप एक अलग / दूरस्थ लक्ष्य प्रणाली (जैसे एंड्रॉइड, रास्पबेरी पाई, एसटीएम 32) के लिए क्रॉस-संकलन कर रहे हैं, तो यह एसडीके में उस सिस्टम के लिए आपके द्वारा स्थापित कहीं पर स्थित होगा। आपको उस विशेष एसडीके प्रलेखन का उल्लेख करना होगा।


2
उत्तर के लिए धन्यवाद। लेकिन उबंटू 11.10 के लिए रास्ता कहां है?
डेरिक जांग

मुझे भ्रमित करने वाली एक बात यह थी कि मुझे "लाइब्रेरी पथ" टैब के बजाय "शामिल" टैब के लिए पथ जोड़ना था। मैंने हमेशा सोचा था कि "एंगलब्रेकेट" में "लाइब्रेरी" शामिल हैं।
अप्रैल

1
आप निर्दिष्ट करते हैं कि कहाँ शामिल टैब पर हेडर फ़ाइलें (यानी .h फ़ाइलें) खोजें। आप लिंकर को बताते हैं कि वह लाइब्रेरी पाथ टैब पर संकलित लाइब्रेरी फाइल्स कहां पा सकता है। कोनों बनाम कोण कोष्ठकों का सम्मेलन शायद संकलक पर निर्भर है, लेकिन मैं हमेशा <> के रूप में सोचता हूं, जैसा कि मानक सिस्टम लाइब्रेरी जगह में पहले दिखता है और "" जैसा कि मेरा प्रोजेक्ट पहले देख रहा है।
टॉड

2
आधुनिक संकलक उद्धरण और कोण कोष्ठक के बीच कोई अंतर नहीं करते हैं। पारंपरिक रूप से मानक प्रणाली हेडर अभी भी कोण कोष्ठक में रखे गए हैं।
सेप्पो एनरवी

53

मुझे ये उत्तर (स्वीकृत एक सहित) कुछ हद तक गूढ़ थे।

मेरे लिए, मुझे वह रास्ता जोड़ना होगा जहाँ stdio.h स्थित है (जैसा कि @ardnew ने कहा है)। ग्रहण में, आप अपनी परियोजना के गुण खोलते हैं, "C / C ++ जनरल" का विस्तार करते हैं और "पथ और प्रतीक" का चयन करते हैं।

सुनिश्चित करें कि आपने अपने includeद्वारा उपयोग की जा रही प्रत्येक भाषा के लिए dir जोड़ा है । (मेरे मामले में, मुझे इसे केवल GNU C ++ में जोड़ना होगा।)

यहां छवि विवरण दर्ज करें


यह मेरी जरूरत के करीब है! बस पथ में उपयोगकर्ता नाम बदलना पड़ा।
लुकास

2
OS X पर आपको कमांड का उपयोग करके मैन्युअल रूप से कमांड लाइन डेवलपर टूल (जिसे पहले Xcode स्थापित करने की आवश्यकता होती है) को इंस्टॉल करने की आवश्यकता /usr/bin/xcode-select --installहो सकती है और फिर आप ग्रहण करने में सक्षम होंगे/usr/include/
RobV

1
योसेमाइट पर। ग्रहण जूनो का उपयोग करना। मेरे द्वारा दिए गए पथ को छोड़कर मेरे लिए इस तरह का काम थोड़ा अलग था (/ Users / SrinivasanNatarajan / android-ndk / platform / android-19 / arch-arm / usr / शामिल)। यद्यपि सभी अनसुलझे त्रुटियां गायब हो गईं, फिर भी मुझे संदेह है कि 'क्या मैंने सही रास्ता तय किया है'। "ग्रहण वास्तव में बेकार है"। विकास के लिए IDE सेटअप करने के लिए घंटों बिताना पड़ता था।
श्रीनिवासन N

1
धन्यवाद। केवल आपके रूप ने मुझे प्रभावित किया।
निकमून

मेरे मामले में (MinGW के साथ), निर्देशिका "C: \ MinGW \" को जोड़ने के लिए "फाइल सिस्टम ..." का उपयोग किया गया है
Gary99

17

सिर्फ ज्ञान के आधार पर जोड़कर, मैंने सिर्फ cygwin के साथ win7 पर ऐसा किया।

यह मेरे लिए काम करने लगता है।

सी के लिए पथ शामिल करें:

D:\dev\cygwin\lib\gcc\i686-pc-cygwin\3.4.4\include
D:\dev\cygwin\usr\include

c ++ के लिए पथ शामिल करें:

D:\dev\cygwin\lib\gcc\i686-pc-cygwin\3.4.4\include
D:\dev\cygwin\lib\gcc\i686-pc-cygwin\3.4.4\include\c++
D:\dev\cygwin\usr\include

यह मुझे नमस्ते दुनिया का एक साफ संकलन है।


मैं भविष्य से हूं। मैं आपको धन्यवाद कहने आया हूं। यह वास्तव में पहली चीज है जिसने मेरे लिए काम किया। Ive के पास इतना कठिन हैलो दुनिया कभी नहीं था। धन्यवाद महोदय।
15V पर nVentimiglia

17

प्रोजेक्ट> प्रॉपर्टीज> C / C ++ जनरल> प्रीप्रोसेसर में शामिल करें> प्रदाता और दोनों का चयन करें:

  • "सीडीटी जीसीसी बिल्ट-इन कंपाइलर सेटिंग्स"
  • "सीडीटी क्रॉस जीसीसी बिल्ट-इन कंपाइलर सेटिंग्स"

उनमें से प्रत्येक के लिए भी उप-प्रविष्टि का चयन करें: "परियोजनाओं के बीच साझा वैश्विक प्रदाता का उपयोग करें"।

एक सी और एक सी + + हैलो दुनिया के साथ Ubuntu 16.04 में ग्रहण 4.8.0 पर परीक्षण किया गया।


3
... और परियोजनाओं के बीच साझा किए गए "वैश्विक प्रदाता का उपयोग करें" बॉक्स की जाँच करें
उरहिकिदुर

मुझे @Urhixidur के अनुसार "प्रोजेक्ट्स के बीच साझा वैश्विक प्रदाता का उपयोग करें" की भी जाँच करनी थी। मैंने ग्रहण त्रुटि में निर्मित समाधानों की एक बड़ी संख्या की कोशिश की और यह वही है जो वास्तव में मेरे लिए काम करता है। वे लाइनें कष्टप्रद थीं। धन्यवाद!
कोडग्युरोस

10
  • फ़ाइल का चयन करें >> नई परियोजना
  • प्रोजेक्ट विज़ार्ड में, C / C ++ >> C ++ प्रोजेक्ट चुनें
  • "प्रोजेक्ट प्रकार" अनुभाग में, " Makefile Project >> हैलो वर्ल्ड C ++ प्रोजेक्ट " चुनें
  • "टूलचिन्स" अनुभाग में, " लिनक्स जीसीसी " चुनें

यह समस्या को हल कर सकता है। (खराब अंग्रेजी के लिए मुझे क्षमा करें)


1
मैंने उन चीजों को किया, लेकिन फिर भी यह नहीं पहचाना गया कि हेडर / usr / शामिल हैं।
कार्डिफ स्पेस मैन

हर एक को जोड़ने से ज्यादा आसान खुद को शामिल करना है। मैंने क्रॉस प्लैटफॉर्म विकल्प का उपयोग किया, जिसने उबंटू पर भी अच्छा काम किया
पनमरी

बहुत मददगार! महान अंग्रेजी।
AturSams

आप किसी मौजूदा प्रोजेक्ट पर यह कैसे करते हैं?
जे एलस्टन

4

मैं Cygwin के साथ ग्रहण का उपयोग कर रहा हूं और यह मेरे लिए काम कर रहा है:

प्रोजेक्ट> प्रॉपर्टीज> C / C ++ जनरल> प्रीप्रोसेसर में शामिल हैं ...> प्रदाता और "CDT GCC बिल्ट-इन कंपाइलर सेटिंग्स Cygwin [साझा]" का चयन करें।


4

मैं कई क्रॉस कंपाइलर कॉन्फ़िगरेशन के साथ काम कर रहा हूं , जहां मुझे एसटीडी हेडर फ़ाइलों (और अन्य पर्यावरण चर) के लिए विभिन्न स्थानों का उपयोग करने की आवश्यकता है।

समाधान इंडेक्सर को स्थापित करना था, इसलिए यह सक्रिय कॉन्फ़िगरेशन का उपयोग करता है।
दुर्भाग्य से , ग्रहण में कुछ बग के कारण , विकल्प स्थानीय रूप से संग्रहीत नहीं किया जाता है, इसलिए यदि आप फिर से ग्रहण खोलते हैं , तो आपको कार्यक्षेत्र कॉन्फ़िगरेशन का उपयोग करना होगा।

विंडो -> वरीयताएँ -> C / C ++ -> Indexer -> सक्रिय बिल्ड कॉन्फ़िगरेशन का उपयोग करें

इससे ग्रहण सही संकलक का उपयोग करेगा जो परियोजना के सक्रिय क्रॉस जीसीसी कॉन्फ़िगरेशन के साथ सेट किया गया है।


एक ही मुद्दा था, ESP8266 के लिए क्रॉस-संकलन। बहुत बुरा यह पृष्ठ इतनी भीड़ है, इसे स्वयं पता लगाना था।
माइकल बॉक्लिंग

इसके लिए शुक्रिया। मेरे द्वारा कई क्रॉस कंपाइलर कॉन्फ़िगरेशन (ESP32 के विभिन्न संस्करणों के लिए "ESP-IDF" एम्बेडेड SDK) बनाने के बाद मुझे भी यह समस्या विकसित हुई थी। इंडेक्सर द्वारा सही हेडर नहीं उठाए जा रहे थे। यह सेटिंग इंडेक्सर को सक्रिय कॉन्फ़िगरेशन के समान वातावरण का उपयोग करने की अनुमति देती है, जो मेरे मामले में इसे सही हेडर चुनने की अनुमति देता है।
davidA

3

शीर्ष उत्तर के रूप में, यह निर्दिष्ट करना आवश्यक है कि बिल्ड फ़ोल्डर कहाँ स्थित हैं, जिसे प्रोजेक्ट पर राइट-क्लिक करके और गुण-> C / C ++ जनरल-> पथ और सिंबल का चयन करके डायलॉग के माध्यम से जोड़ा जा सकता है।

शेष प्रश्न यह है कि किन रास्तों को जोड़ने की आवश्यकता है।

यदि आपने कमांड-लाइन एक्सेस के लिए सही तरीके से सेट अप किया है, और यह जानने की आवश्यकता है कि डिफ़ॉल्ट में इसके उपयोग के पथ शामिल हैं, तो बस पूछें; निर्भर करता है कि आप किस भाषा में रुचि रखते हैं, उपयोग करें:

gcc -x c -v -E /dev/null
gcc -x c++ -v -E /dev/null

... यह डिफ़ॉल्ट कंपाइलर सेटिंग्स को सूचीबद्ध करेगा जो कि gcc का उपयोग करते समय उपयोग किया जाता है (और यह कमांड भी काम करता है यदि "gcc" वास्तव में clang के लिए एक उपनाम है, जैसा कि OSX पर है)।

/dev/null एक खाली फ़ाइल के रूप में उपयोग किया जाता है - हम एक खाली फ़ाइल को पार्स करने के लिए कह रहे हैं

-x <language> आवश्यक के रूप में संकलित करने के लिए भाषा निर्दिष्ट करता है, क्योंकि हम एक फ़ाइल का उपयोग नहीं कर रहे हैं जो भाषा को निर्दिष्ट करता है

-v वर्बोज़ आउटपुट, जिसमें आउटपुट शामिल हैं पथ शामिल हैं

-E केवल प्रीप्रोसेसिंग करें, प्रीप्रोसेस की गई फ़ाइल को आउटपुट करें (यह gcc को शिकायत करने से रोकता है कि एक खाली फ़ाइल सही तरीके से संकलित नहीं होती है)

नीचे की ओर शामिल निर्देशिकाओं की सूची होगी:

#include "..." search starts here:
#include <...> search starts here:
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/7.0.2/include
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include
 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include
 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/System/Library/Frameworks (framework directory)
End of search list.

यदि आप यहां सूचीबद्ध निर्देशिकाओं को दर्ज करते हैं, तो ग्रहण के रास्तों और प्रतीकों के संवाद में सूचीबद्ध क्रम में, ग्रहण सीडीटी मानक हेडर खोजने में सक्षम होना चाहिए, और शायद आपके ओएस के लिए विशिष्ट कुछ अतिरिक्त हेडर।

( संबंधित प्रश्न के देवनाउल के उत्तर के लिए धन्यवाद ।)


वास्तव में बहुत उपयोगी है।
sancho.s ReinstateMonicaCellio

1

ADT में मैंने निम्नलिखित कार्य किए:

  1. प्रोजेक्ट पर राइट क्लिक करें और गुण चुनें
  2. C / C ++ जनरल का विस्तार करें और प्रीप्रोसेसर शामिल करें पथ, मैक्रोज़ आदि का चयन करें।
  3. CDT उपयोगकर्ता सेटिंग प्रविष्टियाँ चुनें
  4. दाएँ हाथ के मेनू से Add ... चुनें
  5. इसमें शामिल करें डायरेक्टरी चेंज पथ पथ को फाइल सिस्टम पथ में जोड़ें
  6. उस निर्देशिका में ब्राउज़ करें जिसमें आपकी फ़ाइलें शामिल हैं
  7. आवश्यकतानुसार हिलाएं और दोहराएं

1

आम तौर पर, ग्रहण में मानक शामिल फ़ाइलों को स्वचालित रूप से हल करने में सक्षम होना चाहिए। यह gcc को कॉल करके और इसके कॉन्फ़िगरेशन को पूछकर करता है। सबसे अधिक संभावना है कि ग्रहण को आपकी gcc नहीं मिल रही है (या कम से कम आपके द्वारा उपयोग किए जा रहे संस्करण नहीं)।

सभी मानकों को निर्दिष्ट करने के बजाय परियोजना सेटिंग्स में पथ शामिल हैं, आप शायद यह सुनिश्चित करना चाहते हैं कि ग्रहण gcc पाता है। उस निर्देशिका को जोड़ें जहां ग्रहण शुरू होने से पहले पेट पर्यावरण परिवेश में पाया जाता है।

यदि आप अलग-अलग संकलक का उपयोग करने के लिए अलग-अलग परियोजनाएं चाहते हैं, तो आप खोज विकल्पों को ट्विक करना चाह सकते हैं। ये डिफ़ॉल्ट रूप से छिपे हुए हैं, इसलिए पहले उन्हें विंडो> वरीयताएँ> C / C ++> प्रॉपर्टी पेज सेटिंग्स> डिस्प्ले "डिस्कवरी ऑप्शंस" पेज से सक्षम करें। फिर आप उन्हें प्रोजेक्ट गुणों में C / C ++ बिल्ड> डिस्कवरी विकल्प के तहत पा सकते हैं।


1

मैं एम्बेडेड प्रोजेक्ट्स के लिए ग्रहण आधारित कोडवर्ड आईडीई का उपयोग कर रहा हूं और मैंने अभी प्रॉब्लम प्रॉपरिटीज़-> C / C ++ जनरल-> पाथ एंड सिंबल्स-> डायरेक्ट्री ऐड्रेस को हटाकर और जोड़कर इस समस्या को हल किया है। इसका मतलब यह है कि "अप्रतिबंधित समावेशन:" संदेश लेने के बहुत सारे कारण हैं और बहुत सारे समाधान भी हैं।


0

पथ और सिंबल्स को कॉन्फ़िगर करने में एक त्रुटि यह है कि शुरू में मैंने एक अलग भाषा के लिए शामिल पथों को कॉन्फ़िगर किया था। मैं CDT और Cygwin gnu C ++ के साथ काम कर रहा हूं। इसलिए आपको GNU C ++ भाषा के तहत प्रतीकों और रास्तों को कॉन्फ़िगर करना होगा।यहां छवि विवरण दर्ज करें


0

लिनक्स पर भी सेट ${COMMAND}करेंgcc

के अंतर्गत:

  • परियोजना
  • गुण
  • C / C ++ जनरल
  • प्रीप्रोसेसर में पथ, मैक्रोज़ आदि शामिल करें।
  • प्रदाताओं
  • सीडीटी जीसीसी बिल्ट-इन कंपाइलर सेटिंग्स
  • कंपाइलर चश्मा प्राप्त करने की आज्ञा

बदलने के:

${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"

साथ में:

gcc -std=c99 -E -P -v -dD "${INPUTS}"

यदि आप ऐसा नहीं करते हैं, तो ग्रहण स्टडआउट दिखाता है:

Unable to find full path for "-E"

और ${HOME}/eclipse-workspace/.metadata/.logशो के तहत लॉग :

!ENTRY org.eclipse.cdt.core 4 0 2020-04-23 20:17:07.288
!MESSAGE Error: Cannot run program "-E": Unknown reason

क्योंकि ${COMMAND} ${FLAGS}खाली हैं, और इसलिए ग्रहण -Eअगले आने वाले को निष्पादित करने की कोशिश करता है ।

मुझे आश्चर्य है कि यदि हम सेटिंग्स पर COMMANDऔर FLAGSचर को ठीक से परिभाषित कर सकते हैं, लेकिन मैंने उन्हें निर्माण चर के रूप में जोड़ने की कोशिश की और यह काम नहीं किया।

C ++ प्रश्न का संस्करण: ग्रहण सीडीटी में C ++ फ़ाइल में "अनट्रेस किए गए समावेश: <iostream>" को कैसे हल करें?

एक्लिप्स 2020-03 (4.15.0), उबंटू 19.10, और मौजूदा स्रोतों के साथ यह न्यूनतम मेकफाइल परियोजना पर परीक्षण किया गया ।


0

क्या आप जाँचते हैं कि क्या यह कमांड लाइन से संकलित है? मेरे लिए लिनक्स पर मदद करने के लिए, lib-dev स्थापित करें।

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