Mojave में अपग्रेड के बाद Mac पर C प्रोग्राम संकलित नहीं कर सकते




macos gcc (6)

मैंने सी कार्यक्रमों को संकलित करने के लिए टर्मिनल पर gcc कमांड का उपयोग किया है, लेकिन अचानक, मेरे मैक के ओएस (मैकओएस 10.14 मोजावे, और एक्सकोड 10.0) के अपडेट के बाद, मुझे संदेश मिलना शुरू हुआ:

test.c:8:10: fatal error: stdio.h: No such file or directory
#include <stdio.h>
         ^~~~~~~~~
compilation terminated.

मेरे पास पहले से ही gcc स्थापित है क्योंकि मैं इसे /usr/local/bin में पा सकता हूँ और वहाँ वास्तव में एक gcc है। मैंने अपने दूसरे iMac पर एक ही फाइल चलाने की कोशिश की और यह बिना किसी समस्या के काम किया।

मैंने xcode-select --install चलाने की कोशिश की और यह पहले से ही स्थापित था, इसलिए इसने उस समस्या को ठीक नहीं किया जो मैं अभी कर रहा हूं। मुझे लग रहा है कि रास्ता गड़बड़ हो गया है क्योंकि ऐसा नहीं लगता है कि इस समस्या को हल करने के लिए अन्य संसाधनों से कुछ कमांड कॉपी करने और चिपकाने के बाद यह gcc पा सकता है।

इस पर कुछ मदद चाहते हैं।


टी एल; डॉ

सुनिश्चित करें कि आपने नवीनतम 'कमांड लाइन टूल्स' पैकेज डाउनलोड किया है और इसे टर्मिनल (कमांड लाइन) से चलाया है:

open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

बल्कि व्यापक टिप्पणियों से एक अर्द्ध सुसंगत उत्तर निकालना ...

प्रस्तावना

बहुत बार, xcode-select --install सही समाधान रहा है, लेकिन यह इस समय मदद नहीं करता है। क्या आपने मुख्य Xcode GUI इंटरफ़ेस चलाने की कोशिश की है? यह आपके लिए कुछ अतिरिक्त सॉफ़्टवेयर स्थापित कर सकता है और सफाई कर सकता है। मैंने ऐसा Xcode 10.0 स्थापित करने के बाद किया था, लेकिन एक सप्ताह या उससे अधिक समय पहले, Mojave में अपग्रेड करने से बहुत पहले।

मैं देखता हूं कि यदि आपका GCC /usr/local/bin में स्थापित है, तो आप शायद XCC से GCC का उपयोग नहीं कर रहे हैं; यह सामान्य रूप से /usr/bin में स्थापित है।

मैंने भी macOS 10.14 Mojave और Xcode 10.0 में अपडेट किया है। हालाँकि, दोनों सिस्टम /usr/bin/gcc और system /usr/bin/clang Apple LLVM version 10.0.0 (clang-1000.11.45.2) Target: x86_64-apple-darwin18.0.0 मेरे लिए काम कर रहे हैं ( Apple LLVM version 10.0.0 (clang-1000.11.45.2) Target: x86_64-apple-darwin18.0.0 दोनों के लिए।) मुझे अपने घर-निर्मित GCC 8.2.0 में हेडर /usr/include करने की समस्या है, जो आपकी समस्या के समानांतर है /usr/local/bin/gcc हेडर नहीं मिल रहा है।

मैं तुलना के एक बिट किया है, और मेरे Mojave मशीन कोई /usr/include सब पर /usr/include , अभी तक /usr/bin/clang ठीक संकलन करने में सक्षम है। एक हेडर ( _stdio.h , प्रमुख अंडरस्कोर के साथ) मेरे पुराने /usr/include ; यह अब गायब है (इसलिए जीसीसी 8.2.0 के साथ मेरी समस्या)। मैं xcode-select --install xcode-select: note: install requested for command line developer tools चला गया और उसने कहा " xcode-select: note: install requested for command line developer tools " और फिर एक GUI इंस्टॉलर चला, जिसने मुझे एक लाइसेंस दिखाया, जिसके लिए मैं सहमत था, और यह डाउनलोड किया और कमांड लाइन स्थापित किया उपकरण - या तो यह दावा किया।

मैंने फिर Xcode GUI (कमांड-स्पेस, Xcode, रिटर्न) चलाया और उसने कहा कि इसे कुछ और सॉफ़्टवेयर इंस्टॉल करने की आवश्यकता है, लेकिन फिर भी कोई /usr/include । लेकिन मैं /usr/bin/clang और /usr/bin/gcc साथ संकलन कर सकता हूं - और -v विकल्प बताता है कि वे उपयोग कर रहे हैं

InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

काम करने का उपाय

तब noted :

मुझे एक रास्ता मिल गया है। यदि हम Xcode 10 का उपयोग कर रहे हैं, तो आप देखेंगे कि यदि आप खोजक में /usr पर जाते हैं, तो आपको 'फोल्डर' नामक कोई फ़ोल्डर दिखाई नहीं देगा, यही कारण है कि टर्मिनल हेडर फ़ाइलों की अनुपस्थिति की शिकायत करता है जो कि है 'शामिल' फ़ोल्डर के अंदर निहित। developer.apple.com/documentation/xcode_release_notes/… , यह कहता है कि एक पैकेज है:

/Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg 

और आपको उस पैकेज को स्थापित करना चाहिए जिसमें /usr/include फ़ोल्डर /usr/include है। तब आपको जाना अच्छा होना चाहिए।

जब अन्य सभी विफल हो जाते हैं, तो मैनुअल पढ़ें या, इस मामले में, रिलीज नोट्स। मुझे यह जानकर कोई आश्चर्य नहीं हुआ कि Apple अपनी यूनिक्स विरासत से मुंह मोड़ना चाहता है, लेकिन मैं निराश हूं। यदि वे सावधान रहें, तो वे मुझे भगा सकते हैं। जानकारी के लिए धन्यवाद।

कमांड लाइन पर निम्नलिखित कमांड का उपयोग करके पैकेज स्थापित करने के बाद, मेरे पास /usr/include फिर से /usr/include , और मेरा GCC 8.2.0 एक बार फिर काम करता है।

open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

कमांड लाइन टूल डाउनलोड करना

जैसा कि Vesal एक मूल्यवान comment में बताते हैं, आपको मोजेज 10.14 पर Xcode 10.1 के लिए कमांड लाइन टूल पैकेज डाउनलोड करने की आवश्यकता है, और आप ऐसा कर सकते हैं:

डाउनलोड प्राप्त करने में सक्षम होने के लिए आपको एक Apple ID के साथ लॉगिन करना होगा। जब आपने डाउनलोड कर लिया है, तो कमांड लाइन टूल पैकेज स्थापित करें। फिर अनुभाग 'वर्किंग सॉल्यूशन' में वर्णित हेडर को स्थापित करें।

यह मेरे लिए Mojave 10.14.1 पर काम किया। मैंने इसे पहले डाउनलोड किया होगा, लेकिन जब तक मैं इस प्रश्न का उत्तर दे रहा था, तब तक मैं भूल चुका था।

मोजावे 10.14.4 और XCode 10.2 पर अपग्रेड करें

पर या 2019-05-17 के बारे में, मैंने Mojave 10.14.4 को अपडेट किया, और XCode 10.2 कमांड लाइन टूल को भी अपग्रेड किया गया (या XCode 10.1 कमांड लाइन टूल्स को 10.2 में अपग्रेड किया गया)। ऊपर दिखाए गए open कमांड ने लापता हेडर को ठीक किया। अभी भी मुख्य XCode को 10.2 में अपग्रेड करने के साथ आने के लिए रोमांच हो सकता है और फिर कमांड लाइन टूल और हेडर पैकेज को फिर से रीइंस्टॉल कर सकते हैं।

XCode 10.3 में अपग्रेड करें (मोजेज 10.14.6 के लिए)

2019-07-22 को, मुझे ऐप स्टोर के माध्यम से सूचना मिली कि XCode 10.3 में अपग्रेड उपलब्ध है और इसमें iOS 12.4, tvOS 12.4, watchOS 5.3 और macOS Mojave 10.14.6 के लिए SDKs शामिल हैं। मैंने इसे अपनी 10.14.5 मशीनों में से एक में स्थापित किया, और इसे चलाया, और अतिरिक्त घटकों को स्थापित किया जैसा कि यह सुझाव दिया गया है, और ऐसा लगता है कि इसे छोड़ दिया गया है /usr/include बरकरार है।

उसी दिन बाद में, मुझे पता चला कि MacOS Mojave 10.14.6 भी उपलब्ध था (सिस्टम प्राथमिकताएँ Update सॉफ़्टवेयर अपडेट), साथ में एक कमांड लाइन उपयोगिताएँ पैकेज IIRC (यह स्वचालित रूप से डाउनलोड और इंस्टॉल किया गया था)। ओ / एस अपडेट को स्थापित करने के बाद, एक बार और, मिटा /usr/include , लेकिन उत्तर के शीर्ष पर open कमान ने इसे फिर से बहाल किया। open कमांड के लिए फाइल पर मेरे पास तारीख 2019-07-15 थी।


Xcode प्राथमिकताएँ -> स्थान जाँचना सुनिश्चित करें।

मेरे द्वारा चयनित कमांड लाइन टूल Xcode के पिछले संस्करण के लिए था (10.1 के बजाय 8.2.1)


जैसा कि जोनाथन लेफ़लर ऊपर बताते हैं, macOS_SDK_headers.pkg फ़ाइल अब Xcode 10.1 में नहीं है।

मेरे लिए क्या काम किया गया था brew upgrade और gcc के अपडेट और / या जो कुछ भी होमब्राय ने पर्दे के पीछे किया वह पथ की समस्याओं को हल करता है।


मुझे इस GitHub टिप्पणी में बहुत अच्छा समाधान और स्पष्टीकरण मिला है। चाल:

make SDKROOT=`xcrun --show-sdk-path` MACOSX_DEPLOYMENT_TARGET=

नौकरी कर ली।


समस्या यह है कि Xcode, विशेष रूप से Xcode 10.x, ने सब कुछ स्थापित नहीं किया है, इसलिए सुनिश्चित करें कि कमांड लाइन उपकरण स्थापित हैं, इसे टर्मिनल शेल में टाइप करें:

xcode- चयन - स्थापना

XCode को भी शुरू करें और सुनिश्चित करें कि सभी आवश्यक इंस्टॉलेशन स्थापित हैं (यदि आपको नहीं है तो आपको संकेत दिया जाना चाहिए।) और चूंकि XCode 10 पूर्ण मैक ओएस एसडीके स्थापित नहीं करता है, इंस्टॉलर को चालू करें

/Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

क्योंकि यह पैकेज XCode 10 द्वारा स्थापित नहीं है।


हर उत्तर की कोशिश करने के बाद मैं यहाँ और ऑनलाइन पा सकता था, फिर भी मुझे कुछ लापता हेडर के लिए त्रुटियाँ हो रही थीं। जब pyRFR को संकलित करने की कोशिश की जा रही थी, मुझे stdexcept बारे में त्रुटियां हो रही थीं, जो स्पष्ट रूप से /usr/include में स्थापित नहीं थी /usr/include अन्य हेडर के साथ /usr/include । हालाँकि, मैंने पाया कि यह मोजावे में कहाँ छिपा था और इसे मेरी ~/.bash_profile फ़ाइल के अंत में जोड़ा गया:

export CPATH=/Library/Developer/CommandLineTools/usr/include/c++/v1

ऐसा करने के बाद, मैं अब pyRFR और अन्य C / C ++ प्रोग्राम संकलित कर सकता हूं। echo | gcc -E -Wp,-v - अनुसार echo | gcc -E -Wp,-v - echo | gcc -E -Wp,-v - , gcc इन हेडर के लिए पुराने स्थान में देख रहा था ( /c++/v1 बिना), लेकिन नया स्थान नहीं, इसलिए इसे CFLAGS में शामिल किया गया।







terminal