कैटालिना 10.15 में अपग्रेड करने के बाद मैक पर सी प्रोग्राम संकलित नहीं कर सकते


64

Mojave में अपग्रेड करने के बाद मैक पर C प्रोग्राम को संकलित करने का पिछला सवाल नहीं हो सकता है , और जो उत्तर दिए गए हैं उनमें से अधिकांश बदलावों को गलत बताया गया है।

अब - सोमवार 2019-10-07 तक - आप macOS Catalina 10.15 में अपग्रेड कर सकते हैं। एक बार फिर, उन्नयन के दौरान, /usr/includeनिर्देशिका को अपडेट से उड़ा दिया गया है, भले ही XCode 11.0 को कैटालिना में अपग्रेड करने (मोजेज 10.14.6) से पहले स्थापित किया गया था। नतीजतन, यह सुनिश्चित करने के लिए बनाया गया कि कोई /usr/includeनिर्देशिका अब और काम नहीं करती है।

Mojave मुद्दों के लिए मुख्य अनुशंसित कदम - कमांड का उपयोग करना:

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

गेट से बाहर काम नहीं करता है क्योंकि निर्देशिका /Library/Developer/CommandLineTools/Packages/मौजूद नहीं है (इसलिए .pkgखोलने के लिए अभी तक कोई फ़ाइल नहीं है )।

क्या निर्देशिका बनाने और आबाद करने का एक अच्छा (आधिकारिक) तरीका है /usr/include?


आपको /usr/includeApple के वर्तमान Xcode के साथ Apple के डेवलपर टूल का उपयोग करने की आवश्यकता नहीं है । हेडर और इस तरह के हैं Xcode.app/Contents/Developer/Platforms/SomePlatform/SDKs/SomeSDK। (कई टारगेट प्लेटफ़ॉर्म का समर्थन करने के लिए अलग-अलग निर्देशिकाओं में हेडर रखना आवश्यक है, और यह /usr/includeसुनिश्चित करने के लिए अच्छा नहीं है कि होस्ट सिस्टम से भिन्न संस्करण को लक्षित करते समय कोई भी संयोगवश इससे फ़ाइलों का उपयोग न करें।) xcode-select -pपथ के लिए क्या दिखाता है। सक्रिय डेवलपर निर्देशिका?
एरिक पोस्टप्सिल

मैंने जीसीसी 9.2.0 (मोजावे पर) का निर्माण किया और यह /usr/includeसिस्टम हेडर के लिए उपयोग करने में सक्षम होने की उम्मीद करता है । मैं चाहूंगा कि मैं अभी भी इसका उपयोग कर सकूं, हालांकि मुझे संदेह है कि Apple ने आखिरकार विरासत यूनिक्स सिस्टम के साथ संगतता के अंतिम वेस्टेज को फेंक दिया है (कुछ हद तक, लेखन दीवार पर था, जो Mojave का काम करने के लिए आवश्यक सिस्टम के साथ था। ')। जिस स्थिति में, मुझे संभवतः जीसीसी को फिर से बनाना होगा जो सिस्टम हेडर की वर्तमान स्थिति को किसी तरह निर्दिष्ट करता है - बीसीसी को कॉन्फ़िगर करने के तरीके के लिए मैनुअल कोशिंग।
जोनाथन लेफ्लर 23

1
@JonathanLeffler: उत्प्रेरित करने के अपडेट के बाद मुझे भी इस समस्या का सामना करना पड़ रहा है कि कुछ फाइलें (जैसे stdlib.h) गायब हैं जो R पैकेज स्थापित करते समय सॉफ़्टवेयर पैकेज R द्वारा उपयोग की जाती हैं। मैंने macOS_10.14 के लिए आपके जैसा ही प्रयास किया, लेकिन यह अब संभव नहीं है। GCC, c ++ या जो भी / Library / Developer / CommandLineTools / usr / bin में स्थापित है, लेकिन R नहीं जानता। मैं क्या कर सकता हूँ?
सेबस्टियन

चूँकि मैं कैटालिना में एक हफ़्ते पहले अपग्रेड किया गया था, इसलिए मैं नए मैक कीबोर्ड पर अब कुख्यात 'डबल टाइपिंग' मुद्दे का शिकार हो गया हूँ, मैं zsh में बदल गया हूँ, अपना विचार बदल दिया है और वापस बैश करने का निर्णय लिया है और bash5.0 पर अपग्रेड करें, अब मैं यहां हूं क्योंकि मैं bash5.0 संकलन नहीं कर सकता। मैं सोच रहा था कि क्या इस समस्या का सही उत्तर मेरे नुकसान में कटौती और आर्क पर स्विच नहीं है?
ड्राईलैब्रेल

समस्या के आसपास एक तरीका Xcode कंपाइलर का उपयोग करना है - यदि वे स्थापित हैं, तो वे जानते हैं कि सिस्टम हेडर कहां खोजना है। स्वीकार किए गए उत्तर में CPATH तकनीक भी ठीक काम करने लगती है। मैं अभी तक एक मैक पर 'डबल टाइपिंग' (जो मुझे पता है) से पीड़ित नहीं है। मैं अपने iPhone का फैसला किया है मैं दिलचस्प सामान के सभी प्रकार टाइप किया है, लेकिन अभी तक, स्पर्श लकड़ी, मेरे मैकबुक प्रो ठीक हो गया है।
जोनाथन लेफलर

जवाबों:


30

मेरे CPATHलिए समस्या को हल करने के लिए निम्न पथ जोड़ना :

export CPATH=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include

मैंने सीपीएटीएच को जोड़ने की कोशिश की; हालाँकि, मुझे अभी भी वही त्रुटि मिल रही है। बस एक साधारण cout करने की कोशिश कर रहा हूँ << "हैलो";
जॉन पेलेंट

1
जब मैंने यह कोशिश की, तो यह एक आकस्मिक परीक्षण में काम किया जीसीसी 9.2.0 के साथ Mojave के तहत बनाया गया जो अब Xcode 11.1 का उपयोग कर रहा है - धन्यवाद।
जोनाथन लेफ्लर

इसने मेरे लिए जीसीसी 9.2.0_1
संदीप

5
आप Xcode.app, उपयोग के बजाय कमांड लाइन उपकरण का उपयोग कर रहे हैं, तोexport CPATH=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/
nalzok

एक विषमता - मुझे कुछ कोड मिल गए हैं जो शुरू हो गए#include <stdlib.h>और फिर शिकायत के बारे में शिकायत करने में विफल रहे:In file included from …/usr/include/sys/wait.h:110, —— from …/usr/include/stdlib.h:66, —— from bm.c:27: —— …/usr/include/sys/resource.h:443:9: error: no previous prototype for ‘getiopolicy_np’ [-Werror=missing-prototypes] —— 443 | int getiopolicy_np(int, int) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);- फिर भी, जब मैं#include <ctype.h>पहलेजोड़ता हूं#include <stdlib.h>, तो यह ठीक है। फिर भी यह काम करने का क्या मतलब है और इसे अपने आप कैसे संभालना है।
जोनाथन लेफलर

48

आगे बढ़ने से पहले, सुनिश्चित करें कि xcode कमांड लाइन टूल स्थापित करें।

xcode-select --install

वास्तव में, आप यह कर सकते हैं! वास्तव में सभी C हेडर यहाँ इस फ़ोल्डर में पाए जाते हैं:

/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/

हमें इस फ़ोल्डर में सभी हेडर फ़ाइल के लिए सिम्बल बनाने की आवश्यकता है:

/usr/local/include/

यह मेरे लिए काम किया! निम्नलिखित कमांड लाइन सभी समस्याओं का ध्यान रखेगी:

sudo ln -s /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/* /usr/local/include/

आपको कुछ चेतावनी मिलेगी। कुछ हेडर पहले से मौजूद हैं, जैसे:

ln: /usr/local/include//tcl.h: File exists
ln: /usr/local/include//tclDecls.h: File exists
ln: /usr/local/include//tclPlatDecls.h: File exists
ln: /usr/local/include//tclTomMath.h: File exists
ln: /usr/local/include//tclTomMathDecls.h: File exists
ln: /usr/local/include//tk.h: File exists
ln: /usr/local/include//tkDecls.h: File exists
ln: /usr/local/include//tkPlatDecls.h: File exists

पूरी तरह से नजरअंदाज करना ठीक है। बस इतना ही।


1
हां, मुझे लगता है कि यह संभव है - सुझाव के लिए धन्यवाद। यह वास्तव में 'सिस्टम हाइजीन' (जैसे कि डुप्लिकेट हेडर) के लिए मेरी आवश्यकताओं से मेल नहीं खाता है और /usr/local/निर्देशिका पदानुक्रम सिस्टम सॉफ़्टवेयर के बजाय स्थानीय सॉफ़्टवेयर के लिए है। IMO, हेडर में होना चाहिए /usr/includeऔर Apple सिर्फ एक दर्द है।
जोनाथन लेफलर

1
चारों ओर एक रास्ता है, काम कर सकता है, आप कोशिश कर सकते हैं। पुनर्प्राप्ति मोड में, SIP को अक्षम करें, फिर /लेखन मोड में माउंट करें। फिर /usr/includeफ़ोल्डर को पॉप्युलेट करें । ऐसा इसलिए है क्योंकि 10.15 में, सिस्टम केवल मोड के रूप में पढ़ता है। SIP को अक्षम किए बिना, आप सिस्टम वॉल्यूम माउंट नहीं कर पाएंगे।
रॉय

@KomolNathRoy: आपके संकेत के लिए धन्यवाद। इसने मेरे लिए बहुत अच्छा काम किया। मैं आखिरकार अपने सभी वांछित पैकेजों को सांख्यिकीय सॉफ्टवेयर आर में स्थापित कर सकता हूं, क्योंकि कोई भी आर स्थापना के लिए आवश्यक सभी चीजों को नहीं पाता है।
सेबस्टियन

7
इस समाधान ने मेरे लिए कैटलिना 10.15
मैथ्यू बारबरा

2
अस्थायी उपाय के रूप में, SIP को अक्षम करना मेरे लिए स्वीकार्य नहीं है।
जोनाथन लेफलर

22

टी एल; डॉ

ऐसा प्रतीत होता है कि Apple /usr/includeकुछ ऐसा मानता है जो डोडो के रास्ते चला गया है - यह विलुप्त है - या शायद यह मोंटी पाइथन के तोते की तरह है ।

Apple द्वारा प्रदान की गई GCC का उपयोग करना (वास्तव में, यह किसी अन्य नाम से क्लैंग है, जैसा कि संस्करण जानकारी दिखाता है) या क्लैंग समस्याओं से बचा जाता है। दोनों /usr/bin/gccऔर /usr/bin/clangप्रणाली पुस्तकालयों नीचे चार निर्देशिका स्तरों मिलेगा:

/Applications/Xcode.app/Contents/Developer/Platforms/…

यदि आप अपना स्वयं का GCC या अन्य संकलक बनाते हैं, तो आपको Xcode निर्देशिका निर्देशिका के तहत सिस्टम लाइब्रेरी खोजने के लिए (संभवतः) इसे कॉन्फ़िगर करने की आवश्यकता होगी।

एक्सप्लोरेशन

उन्नयन के तुरंत बाद, मैंने XCode 11.0 चलाया। यह कुछ अतिरिक्त घटकों को स्थापित करना चाहता था, इसलिए मैंने इसे ऐसा करने दिया। हालाँकि, इसके /usr/includeतहत निर्देशिका को बहाल नहीं किया गया था/Library

पिछले प्रश्न में सलाह के अन्य बिट्स में से एक था:

xcode-select --install

ऐसा करते समय, यह दावा किया गया कि इसने कमांड लाइन उपयोगिताओं को डाउनलोड किया, और यह सुनिश्चित किया कि /usr/bin/gccऔर /usr/bin/clangआदि मौजूद थे। यह एक उपयोगी कदम है (हालांकि मैं निश्चित रूप से जाँच नहीं करता था कि वे पहले मौजूद थे)।

$ /usr/bin/gcc --version
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/4.2.1
Apple clang version 11.0.0 (clang-1100.0.33.8)
Target: x86_64-apple-darwin19.0.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
$

उपयोग करना /usr/bin/gcc, अब कार्यक्रमों को संकलित करना संभव है:

$ make CC=/usr/bin/gcc al
co  RCS/al.c,v al.c
RCS/al.c,v  -->  al.c
revision 1.7
done
/usr/bin/gcc -I/Users/jleffler/inc -g -O3 -std=c11 -pedantic -Wall -Wextra -Werror -Wshadow -Wmissing-prototypes -Wpointer-arith  -Wold-style-definition -Wcast-qual -Wstrict-prototypes -DHAVE_MEMMEM -DHAVE_STRNDUP -DHAVE_STRNLEN  -DHAVE_GETDELIM   -o al al.c -L/Users/jleffler/lib/64  -ljl
$

हालांकि, /usr/includeअभी भी लापता है। अभी एक निर्देशिका है /Library:

$ ls /Library/Developer
CommandLineTools  PrivateFrameworks
$ ls /Library/Developer/CommandLineTools
Library SDKs    usr
$ ls /Library/Developer/CommandLineTools/SDKs
MacOSX.sdk      MacOSX10.14.sdk MacOSX10.15.sdk
$ ls /Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/
Entitlements.plist SDKSettings.json   System
Library            SDKSettings.plist  usr
$

न तो और Systemन हीLibrary निर्देशिका कुछ भी बहुत आशाजनक होते हैं।

जब बाकी सब विफल हो जाए, तो मैनुअल पढ़ें

अगला चरण - रिलीज़ नोट्स खोजें और पढ़ें:

इसमें कोई जानकारी नहीं है जो इससे संबंधित है। तो, संभावना है (AFAICS, केवल एक या दो घंटे के प्रयास के बाद) कि Apple अब समर्थन नहीं करता है /usr/include- हालांकि यह अभी भी पूरी तरह से भरा हुआ है /usr/lib( /libहालांकि नहीं )।

-vजोड़ा गया जीसीसी विकल्प के साथ एक और संकलन की जांच करने का समय (मेरे द्वारा उपयोग किए गए मेकफाइल में, सेटिंग UFLAGSसी कंपाइलर कमांड लाइन में विकल्प जोड़ता है):

$ make UFLAGS=-v CC=/usr/bin/gcc ww
co  RCS/ww.c,v ww.c
RCS/ww.c,v  -->  ww.c
revision 4.9
done
/usr/bin/gcc -I/Users/jleffler/inc -g -O3 -std=c11 -pedantic -Wall -Wextra -Werror -Wshadow -Wmissing-prototypes -Wpointer-arith  -Wold-style-definition -Wcast-qual -Wstrict-prototypes -DHAVE_MEMMEM -DHAVE_STRNDUP -DHAVE_STRNLEN  -DHAVE_GETDELIM -v  -o ww ww.c -L/Users/jleffler/lib/64  -ljl
Apple clang version 11.0.0 (clang-1100.0.33.8)
Target: x86_64-apple-darwin19.0.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
 "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang" -cc1 -triple x86_64-apple-macosx10.15.0 -Wdeprecated-objc-isa-usage -Werror=deprecated-objc-isa-usage -emit-obj -disable-free -disable-llvm-verifier -discard-value-names -main-file-name ww.c -mrelocation-model pic -pic-level 2 -mthread-model posix -mdisable-fp-elim -fno-strict-return -masm-verbose -munwind-tables -target-sdk-version=10.15 -target-cpu penryn -dwarf-column-info -debug-info-kind=standalone -dwarf-version=4 -debugger-tuning=lldb -ggnu-pubnames -target-linker-version 512.4 -v -resource-dir /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -I /Users/jleffler/inc -D HAVE_MEMMEM -D HAVE_STRNDUP -D HAVE_STRNLEN -D HAVE_GETDELIM -I/usr/local/include -O3 -Wall -Wextra -Werror -Wshadow -Wmissing-prototypes -Wpointer-arith -Wold-style-definition -Wcast-qual -Wstrict-prototypes -Wno-framework-include-private-from-public -Wno-atimport-in-framework-header -Wno-extra-semi-stmt -Wno-quoted-include-in-framework-header -pedantic -std=c11 -fdebug-compilation-dir /Users/jleffler/src/cmd -ferror-limit 19 -fmessage-length 110 -stack-protector 1 -fstack-check -mdarwin-stkchk-strong-link -fblocks -fencode-extended-block-signature -fregister-global-dtors-with-atexit -fobjc-runtime=macosx-10.15.0 -fmax-type-align=16 -fdiagnostics-show-option -fcolor-diagnostics -vectorize-loops -vectorize-slp -o /var/folders/77/zx9nk6dn7_dg4xd4stvt42v00000gn/T/ww-4cb85b.o -x c ww.c
clang -cc1 version 11.0.0 (clang-1100.0.33.8) default target x86_64-apple-darwin19.0.0
ignoring nonexistent directory "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/local/include"
ignoring nonexistent directory "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/Library/Frameworks"
#include "..." search starts here:
#include <...> search starts here:
 /Users/jleffler/inc
 /usr/local/include
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0/include
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include
 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include
 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks (framework directory)
End of search list.
 "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld" -demangle -lto_library /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/libLTO.dylib -dynamic -arch x86_64 -macosx_version_min 10.15.0 -syslibroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -o ww -L/Users/jleffler/lib/64 /var/folders/77/zx9nk6dn7_dg4xd4stvt42v00000gn/T/ww-4cb85b.o -ljl -L/usr/local/lib -lSystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0/lib/darwin/libclang_rt.osx.a
 "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/dsymutil" -o ww.dSYM ww
$

डेटा के उस बर्फ़ीले तूफ़ान में मुख्य जानकारी है:

-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk

यह संकलन के लिए प्रभावी रूप से 'रूट' निर्देशिका है, इसलिए इसके लिए उप-निर्देशिका होनी चाहिए usrऔर usr/include:

$ ls /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk
Entitlements.plist SDKSettings.json   System
Library            SDKSettings.plist  usr
$ ls /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr
bin     include lib     libexec share
$ ls /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include
AppleTextureEncoder.h  dns_util.h             memory.h               simd
AssertMacros.h         dtrace.h               menu.h                 slapi-plugin.h
Availability.h         editline               miscfs                 spawn.h
AvailabilityInternal.h err.h                  module.modulemap       sqlite3.h
AvailabilityMacros.h   errno.h                monetary.h             sqlite3ext.h
AvailabilityVersions.h eti.h                  monitor.h              stab.h
lots more lines
dirent.h               mach-o                 security               xcselect.h
disktab.h              mach_debug             semaphore.h            xlocale
dispatch               machine                servers                xlocale.h
dlfcn.h                malloc                 setjmp.h               xpc
dns.h                  math.h                 sgtty.h                zconf.h
dns_sd.h               membership.h           signal.h               zlib.h
$

इससे पता चलता है कि मील-लंबी और पूरी तरह से अनमोल डायरेक्टरी नाम में मानक C और POSIX हेडर, साथ ही Apple-विशिष्ट एक्स्ट्रा कलाकार शामिल हैं।

पिछली /usr/local/निर्देशिका अक्षुण्ण प्रतीत होती है; के usr/local/includeतहत मौजूद नहीं के बारे में चेतावनी -isysrootdirहानिरहित है (और -vविकल्प के बिना दिखाई नहीं देता है )।


क्षमा करें, आपके सुझाव का पालन नहीं कर सका। मुझे उत्प्रेरक अपडेट के साथ वही त्रुटि मिल रही है। Vscode के साथ मैं C ++ एप्लिकेशन का निर्माण wchar.hनहीं कर पाया और त्रुटि नहीं मिली। मैंने इस फ़ोल्डर को शामिल करने का प्रयास किया है -I / Applications / Xcode.app / Contents / Developer / Platforms / MacOSX.platform / Developer / SDKs / MacOSX.sdk / usr / शामिल हैं और iam को "त्रुटि के लिए लापता प्रतीकों जैसे अन्य त्रुटियां मिल रही हैं: कोई सदस्य नहीं वैश्विक नामस्थान में 'isless' नाम दिया गया है
user3279954

फ़ंक्शंस --verboseफ़ाइल में सक्षम किया गया और देखा गया कि बनाम कोड उस /usr/include/c++/v1/फ़ोल्डर को देख रहा है जो अब उत्प्रेरक में मौजूद नहीं है। निम्नलिखित फ़ोल्डर के साथ-साथ उपरोक्त एसडीके में शामिल हैं और अब यह काम करता है। "-आई / लाइब्रेरी / डेवलपर /
कमांडलाइनटूल

@trojanfoe - मुझे SCCS पसंद है, लेकिन 1999 में यह स्पष्ट नहीं था कि SCCS पूरी तरह से Y2K के बाद काम करने जा रहा था (और SCCS का एक अच्छा खुला स्रोत कार्यान्वयन नहीं था जो मुझे पता था), इसलिए मैंने अनिच्छा से आरसीएस पर स्विच किया।
जोनाथन लेफ्लर 13

वाह: डी तो वैसे भी /usr/includeलापता होने के साथ क्या समस्या है? यह हमेशा संकलक का हिस्सा होता था जिसमें पथ शामिल होता है इसलिए उपयोगकर्ता को इसके बारे में जानने की आवश्यकता नहीं होती है (इसके अलावा जब आप यह खोजने की कोशिश कर रहे थे कि कुछ कहाँ घोषित किया गया था)। क्लेंग अपने एसडीके पथ के साथ ऐसा ही करता है, Xcode.appइसलिए नेट-प्रभाव समान है।
ट्रोजनफोरो

1
@trojanfoe: एक समस्या (मेरी प्राथमिक समस्या) /usr/includeAWOL के साथ यह है कि यदि आपने स्रोत से अपना स्वयं का जीसीसी बनाया है, तो संभवतः सिस्टम हेडर को खोजने के लिए संकलित किया गया था /usr/includeऔर इसलिए संकलन विफल हो जाते हैं। मैं क्लैंग के साथ-साथ नवीनतम जीसीसी का उपयोग करना चाहता हूं। मैं Apple के क्लैंग का उपयोग करके खुश हूं, लेकिन मैं Apple के क्लैंग मस्कारिंग को जीसीसी के रूप में उपयोग करने के लिए खुश नहीं हूं - यह जीसीसी के समान नहीं है। मैंने अभी तक सिस्टम हेडर के साथ जीसीसी के निर्माण के लिए एक नुस्खा काम नहीं किया है। (मुझे लगता --with-native-system-header-dir="${XCODE_HDR}"है कि जवाब का हिस्सा है, यह, हालांकि, पूरा जवाब नहीं है।)
जोनाथन लेफ़लर

7

MakeXcode कमांड लाइन टूल्स (Xcode CLI) के लिए हेडर अब कहां स्थित हैं, यह इंगित करने के लिए निम्नलिखित निहित चर सेट करें :

export CFLAGS+=-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
export CCFLAGS+=-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
export CXXFLAGS+=-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
export CPPFLAGS+=-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk

-isysrootविकल्प जड़ फ़ाइलों प्रणाली रूट निर्देशिका से दूर के स्थान अपडेट हो जाता है /

तो, यह सुनिश्चित करता है कि आम /usr/*फाइलें अपनी नई जगह पर मिलें।

यही है, /Library/Developer/CommandLineTools/SDKs/MacOSX.sdkअब फाइलें मिली हैं। ये फाइलें हैं:

Entitlements.plist 
Library
SDKSettings.json
SDKSettings.plist
System
usr

मेरे मेकफ़ाइल्स (और सबसे अधिक अन्य मेकफ़ाइल्स जो मैं देख रहा हूं) में, CFLAGSएक एकल विकल्प की तुलना में बहुत अधिक जटिल है - -isysrootविकल्प को अन्य सेटिंग्स (बहुत सारी अन्य सेटिंग्स) के अलावा 'होना चाहिए। यहां एक विचार का कर्नेल हो सकता है ( -isysrootविकल्प और स्थान को पास करें /Library/Developer/…), लेकिन इसे प्राइम टाइम के लिए तैयार होने से पहले कुछ चमकाने की आवश्यकता होगी।
जोनाथन लेफलर

export CFLAGS+=-isysroot ...इसके बजाय @JonathanLeffler का उपयोग उस केस के लिए काम करेगा। यह एकमात्र समाधान है जो मेरे लिए (मोजेव पर (10.14) कैटलिना (10.15) एसडीके के साथ काम करता है। मेरे पास .pkgहर किसी के बारे में बात करने की फाइल नहीं है, हालांकि मेरे एक्सकोड और कमांड लाइन उपकरण आज तक हैं)।
Norswap

@ नोर्सवाप - CFLAGS=…और के उपयोग के बीच एक बड़ा अंतर है CFLAGS+=…
जोनाथन लेफ्लर

@JonathanLeffler सहमत हुए। मैंने उपयोग करने के लिए उत्तर अपडेट कर दिया है +=। साभार @Norswap
कोटलेस

1
वैकल्पिक रूप से, मुझे पता चला है कि सेटिंग SDKROOTएक ही sdk मूल्य ( /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk) में भी मेरे लिए काम करेगी!
Norswap

4

मैं OSX में R के लिए C ++ कंपाइलर के साथ एक नौसिखिया हूं और मुझे एक ही मुद्दा मिला कि OS अपडेट होने के बाद C ++ को हेडर नहीं मिल सकता था ( math.h याद आ रहा था, हालांकि )। मैंने https://thecoatlessprofurer.com/programming/cpp/r-compiler-tools-for-rcpp-on-macos/ से निर्देशों का पालन किया, लेकिन कुछ भी नहीं बदला।

आखिरकार, मैंने Xcode CLI को फिर से स्थापित करने के बाद मेरे लिए काम किया

xcode-select --install

और फिर झंडे को बदलकर वार को @Coatless के रूप में सुझाया गया:

export CFLAGS=-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
export CCFLAGS=-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
export CXXFLAGS=-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
export CPPFLAGS=-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk

1

मेरे मामले में मैं लग रहा था llvmऔर gccभी homebrew का उपयोग कर स्थापित किया है। जब मैंने उन को हटा दिया, और इस तरह पूरी तरह से मैकओएस क्लैंग पर भरोसा किया, तो यह हेडर पा सकता था और संकलन फिर से काम कर सकता था।


0

इस सवाल में कोमोल नाथ रॉय के जवाब के /usr/local/includeबाद मेरे लिए apue.h निर्भरता अभी भी गायब थी ।

मैंने निर्भरता को मैन्युअल रूप से git से डाउनलोड किया और इसे अंदर रखा /usr/local/include


हेडर apue.hW रिचर्ड स्टीवंस, स्टीफन ए रागो एडवांस्ड प्रोग्रामिंग इन यूनिक्स एनवायरनमेंट, 3 जी एडन 2013 से आता है। AFAIK, यह Apple द्वारा सिस्टम हेडर के रूप में कभी प्रदान नहीं किया गया था। (यह /usr/includeमेरी मशीन पर नहीं है जो अभी भी Mojave चलाती है।) यदि इसे एक बार स्थापित किया /usr/includeगया था, तो यह संभवतः Apple द्वारा प्रदान किए जाने के बजाय मैन्युअल रूप से बनाया गया था। जैसे, यह पहले से स्थापित होना चाहिए /usr/local/includeथा।
जोनाथन लेफलर

मेरे भोले सवाल का बहाना है लेकिन मैं इस हफ्ते C ++ पर अपने हाथ मिला लिया। क्या निर्भरता / हेडर मैन्युअल रूप से c ++ में प्रबंधित किए जाते हैं? यदि हाँ, तो क्या मुझे सभी आश्रितों / हेडरों को कहना चाहिए /usr/include?
मैथ्यू बारबरा

1
Q1: कम या ज्यादा। यह थोड़ा सा आप पर निर्भर करता है कि आपका क्या मतलब है, लेकिन आपको सी या सी ++ के लिए निर्भरता और हेडर के बारे में चिंता करना होगा अगर हेडर आपके द्वारा काम कर रहे मशीन (एस) पर मानक नहीं हैं। फिर सवाल आता है - क्या मानक है? और जो सबसे अच्छा उत्तर दिया जा सकता है, वह है "यह निर्भर करता है", और यह बहुत सारे कारकों पर निर्भर करता है - जिसमें 'प्लेटफ़ॉर्म' (O / S, संकलक) भी शामिल है। Q2 है "नहीं, आपको आमतौर पर कुछ भी नहीं डालना चाहिए /usr/include" - /usr/local/includeइसके बजाय उपयोग करें । आम तौर पर, अकेले छोड़ना /usr/includeऔर उसके /usr/libतहत सामग्री जोड़ना सबसे सुरक्षित है /usr/local
जोनाथन लेफलर

0

उपाय जितना मैंने सोचा था उससे कहीं ज्यादा सरल था। Clang / llvm स्थापित करें।

brew install llvm

फिर हमें खुद ही सहानुभूति पैदा करने की जरूरत है।

for f in /usr/local/Cellar/llvm/9.0.0_1/bin/clang*; do ln -s ${f} /usr/local/bin/"${f##*/}"; done

तथा

ln -s /usr/local/Cellar/llvm/9.0.0_1/include/c++ /usr/local/include/c++

अपने llvm संस्करण के आधार पर, उपरोक्त आदेशों को संशोधित करें।

अब, आप किसी भी कस्टम झंडे को पारित किए बिना C ++ प्रोग्राम को संकलित कर सकते हैं।

clang++ hello.cpp

0

मैंने 1) मैन्युअल रूप से 2 जोड़ने की कोशिश की) काढ़ा स्थापित करें, लेकिन वे काम नहीं किया।

अंत में, इसने मेरे लिए काम किया: https://gitmemory.com/issue/pytorch/pytorch/31190/565153503

निम्नलिखित env var सेट करके:

export CC=clang
export CXX=clang++
export MACOSX_DEPLOYMENT_TARGET=10.9

0

मेरे लिए, यह अनुसरण के रूप में अच्छी तरह से काम करता है:

1. xcode-select --install

2. sudo ln -s /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/* /usr/local/include/

3. export SDKROOT=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.