Catalina 10.15로 업그레이드 한 후 Mac에서 C 프로그램을 컴파일 할 수 없습니다


64

Mojave로 업그레이드 한 후 Mac에서 C 프로그램을 컴파일 할 수 없다는 이전의 질문이 있으며 그에 대한 대답은 무엇이 잘못되었는지에 대한 대부분의 변형을 다루었습니다.

2019 년 10 월 7 일 월요일 현재 macOS Catalina 10.15로 업그레이드 할 수 있습니다. 다시 한 번, 업그레이드하는 동안 /usr/includeXMod 11.0을 Mojave 10.14.6에서 Catalina로 업그레이드하기 전에 설치했지만 업그레이드 중에 디렉토리가 업데이트되었습니다. 결과적으로 /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에 대한 경로 쇼 활성 개발자 디렉토리?
Eric Postpischil

GCC 9.2.0 (Mojave)을 구축 /usr/include했으며 시스템 헤더 에 사용할 수있을 것으로 기대합니다 . 애플이 레거시 유닉스 시스템과의 호환성에 대한 마지막 흔적을 버렸다고 생각하지만 여전히 사용할 수 있기를 원합니다 (어쨌든 Mojave를 작동시키는 데 필요한 시스템으로 글을 쓰고 있음) '). 이 경우 시스템 헤더의 현재 위치를 지정하여 GCC를 다시 빌드해야합니다. GCC를 구성하는 방법에 대한 수동 bash.
Jonathan Leffler

1
@JonathanLeffler : catalina로 업데이트 한 후 R 패키지를 설치할 때 소프트웨어 패키지 R에서 사용하는 stdlib.h와 같은 일부 파일이 누락되는 문제에 직면했습니다. macOS_10.14와 동일하게 시도했지만 더 이상 불가능합니다. GCC, c ++ 또는 / Library / Developer / CommandLineTools / usr / bin에 설치되어 있지만 R은 알 수 없습니다. 어떡해?
sebastiann

일주일 정도 전에 Catalina로 업그레이드 한 이후로 새로운 Mac 키보드에서 악명 높은 '더블 타이핑'문제의 희생자가되었습니다 .zsh로 전환하고 마음이 바뀌었고 bash로 다시 전환하기로 결정했습니다. bash5.0으로 업그레이드하면 bash5.0을 컴파일 할 수 없기 때문에 여기에 있습니다. 이 문제에 대한 정답이 손실을 줄이고 아치로 전환하는 것이 아닌지 궁금합니다.
DryLabRebel

이 문제를 해결하는 한 가지 방법은 Xcode 컴파일러를 사용하는 것입니다. 설치된 경우 시스템 헤더를 찾을 위치를 알고 있습니다. 허용 된 답변의 CPATH 기술도 정상적으로 작동하는 것 같습니다. 나는 Mac에서 '이중 입력'(내가 아는)으로 고통받지 않았습니다. 나는 내 아이폰에 내가 재미있는 종류의 모든 것을 입력하기로 결정했지만 지금까지는 나무를 만졌다. MacBook Pro는 괜찮았다.
Jonathan Leffler 2018 년

답변:


30

CPATH문제 를 해결 하기 위해 다음 경로를 추가하십시오 .

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

CPATH 추가를 시도했습니다. 그러나 여전히이 같은 오류가 발생합니다. 그냥 간단한 cout << "hello";
Jon Pellant

1
이 작업을 시도했을 때, 현재 Xcode 11.1을 사용하여 Mojave에서 빌드 된 GCC 9.2.0으로 캐주얼 테스트를 진행했습니다. 감사합니다.
Jonathan Leffler

이것은 GCC 9.2.0_1에서 작동했습니다
Sandeep

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>그것은 확인을 컴파일합니다. 이것이 의미하는 바와 자동으로 처리하는 방법을 여전히 연구하고 있습니다.
Jonathan Leffler

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은 고통 스럽습니다.
Jonathan Leffler

1
해결 방법이 있으며 작동 할 수 있습니다. 복구 모드에서 SIP를 비활성화 한 다음 /쓰기 모드 로 마운트하십시오 . 그런 다음 /usr/include폴더를 채우십시오 . 10.15에서는 시스템이 읽기 전용 모드로 마운트되기 때문입니다. SIP를 비활성화하지 않으면 시스템 볼륨을 마운트 할 수 없습니다.
Roy

@ KomolNathRoy : 힌트 주셔서 감사합니다. 이것은 나를 위해 아주 잘 작동했습니다. R은 설치에 필요한 모든 것을 찾지 못해 통계 소프트웨어 R에 원하는 패키지를 모두 설치할 수있었습니다.
sebastiann

7
이 솔루션은 Catalina 10.15에서 나를 위해 일했습니다
Matthew Barbara

2
임시 조치로도 SIP를 사용하지 않도록 설정하는 것은 허용되지 않습니다.
Jonathan Leffler

22

TL; DR

애플 /usr/include은 도도의 길을 갔다고 생각합니다. 멸종되었거나 몬티 파이썬의 앵무새 와 같습니다. .

Apple에서 제공 한 GCC (실제로 버전 정보에 표시된 다른 이름의 Clang)를 사용하거나 Clang은 문제를 피합니다. 모두 /usr/bin/gcc/usr/bin/clang시스템 라이브러리를 아래 네 개의 디렉토리 레벨을 찾을 수 있습니다 :

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

자체 GCC 또는 다른 컴파일러를 빌드하는 경우 Xcode 응용 프로그램 디렉토리에서 시스템 라이브러리를 찾도록 GCC를 구성해야합니다.

탐험

업그레이드 직후에 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
$

디렉토리 SystemLibrary디렉토리 모두 매우 유망한 것을 포함 하지 않습니다 .

다른 모든 것이 실패하면 매뉴얼을 읽으십시오

다음 단계 — 릴리스 정보를 찾아 읽으십시오.

여기에는 이와 관련된 정보가 없습니다. 따라서 애플은 더 이상 지원하지 않을 가능성이 있지만 (1 시간 또는 2 시간 만 노력하면 AFAICS) /usr/include여전히 완전히로드 된 상태는 /usr/lib아닙니다 ( /lib아직도 아님).

GCC 옵션이 -v추가 된 다른 컴파일을 확인하는 시간 (내가 사용한 makefile에서 설정 UFLAGS하면 옵션이 C 컴파일러 명령 행에 옵션을 추가 함) :

$ 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

그것은 실제로 컴파일을위한 '루트'디렉토리이므로 usrand 에 대한 하위 디렉토리가 있어야합니다 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
$

이것은 1 마일 길이의 완전히 잊을 수없는 디렉토리 이름에 표준 C 및 POSIX 헤더와 Apple 관련 추가 정보가 포함되어 있음을 보여줍니다.

이전 /usr/local/디렉토리는 손상되지 않은 것으로 보입니다. usr/local/include아래에 존재하지 않는다는 경고 -isysrootdir는 무해합니다 ( -v옵션이 없으면 표시되지 않음 ).


당신의 제안에 따라 죄송합니다. catalina 업데이트와 동일한 오류가 발생합니다. vscode를 사용하면 C ++ 앱을 빌드 할 수 wchar.h없어 오류가 발생하지 않습니다. 이 폴더 (I / Applications / Xcode.app / Contents / Developer / Platforms / MacOSX.platform / Developer / SDKs / MacOSX.sdk / usr / include)를 포함 시키려고했는데 "오류 : 멤버 없음" 글로벌 네임 스페이스에서 '
isless

--verbose작업 파일에서 활성화 되었으며 vs 코드가 /usr/include/c++/v1/더 이상 catalina에 더 이상 존재하지 않는 폴더를 보고 있음을 알았습니다 . 위의 sdk include와 함께 다음 폴더를 추가하면 이제 작동합니다. "-I / 라이브러리 / 개발자 / CommandLineTools / usr / include / c ++ / v1 /",
user3279954

@trojanfoe — SCCS를 선호하지만 1999 년에 SCCS가 Y2K 이후에 제대로 작동하지 않을지 (그리고 내가 알고있는 SCCS의 훌륭한 오픈 소스 구현이 없었 음) 확실하지 않았기 때문에 마지 못해 RCS로 전환했습니다.
Jonathan Leffler

와우 : D 어쨌든 /usr/include실종 되는 문제는 무엇 입니까? 그것은 항상 암시 적으로 컴파일러 포함 경로의 일부이므로 사용자는 그것에 대해 알 필요가 없습니다 (무언가 선언 된 곳을 찾으려고 할 때를 제외하고). Clang은 SDK 경로에서 동일한 작업을 수행 Xcode.app하므로 순 효과는 동일합니다.
trojanfoe 2009

1
@trojanfoe : /usr/include사라진 AWOL의 한 가지 문제 (내 주요 문제) 는 소스에서 자체 GCC를 빌드 한 경우 시스템 헤더를 찾기 위해 컴파일 된 /usr/include것이므로 컴파일이 실패한다는 것입니다. Clang뿐만 아니라 최신 GCC를 사용하고 싶습니다. Apple의 Clang을 사용하게되어 기쁩니다. 그러나 Apple의 Clang을 가장하여 GCC로 사용하는 것은 좋지 않습니다. GCC와 다릅니다. 시스템 헤더를 재배치하여 GCC를 작성하는 방법은 아직 해결하지 못했습니다. (나는 --with-native-system-header-dir="${XCODE_HDR}"대답의 일부 라고 생각 하지만 전체 답은 아닙니다.)
Jonathan Leffler

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

내 makefile (및 내가 보는 대부분의 다른 makefile)에서 CFLAGS하나의 단일 옵션보다 훨씬 더 복잡합니다. -isysroot옵션은 다른 설정 (많은 다른 설정)에 '추가'해야합니다. 여기에 아이디어의 핵심이있을 수 있지만 ( -isysroot옵션과 위치를 전달하십시오 /Library/Developer/…), 프라임 타임을 준비하기 전에 약간의 연마가 필요합니다.
Jonathan Leffler

@JonathanLeffler export CFLAGS+=-isysroot ...대신 사용하면 해당 사용 사례에서 작동합니다. 이것은 나를 위해 일한 유일한 솔루션입니다 (Catalina (10.15) SDK를 사용하는 Mojave (10.14). .pkg내 XCode 및 명령 줄 도구가 최신이지만 모든 사람들이 이야기 하는 파일 이 없습니다 ).
Norswap

@Norswap -의 사용 사이에 큰 차이가있다 CFLAGS=…CFLAGS+=….
Jonathan Leffler 2014

@JonathanLeffler가 동의했습니다. 사용하도록 답변을 업데이트했습니다 +=. 감사합니다 @Norswap.
코트리스

1
또는 SDKROOT동일한 SDK 값 ( /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk)으로 설정 하면 효과가 있음을 알았 습니다.
Norswap

4

나는 OSX에서 R을위한 C ++ 컴파일러를 가진 초보자이며 OS가 업데이트 된 후에 C ++이 헤더를 찾을 수 없다는 것과 같은 문제가 있습니다 ( math.h는 없지만 ). 나는 https://thecoatlessprofessor.com/programming/cpp/r-compiler-tools-for-rcpp-on-macos/의 지시를 따랐 지만 아무것도 바뀌지 않았습니다.

마지막으로 Xcode CLI를 다시 설치 한 후 나에게 도움이되었습니다.

xcode-select --install

@Coatless가 제안한대로 플래그를 Var로 변경하십시오.

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또한 사제를 사용하여 설치. 그것들을 제거하고 macOS clang에 완전히 의존했을 때 헤더를 찾을 수 있었고 컴파일이 다시 작동했습니다.


0

이 질문에서 Komol Nath Roy의 답변을 따른/usr/local/include 후에 apue.h 종속이 여전히 누락되었습니다 .

git에서 수동으로 종속성을 다운로드하여 배치했습니다. /usr/local/include


이 헤더 apue.hUnix 환경의 Stephen A Rago 고급 프로그래밍 인 W Richard Stevens ( 2013 년 3 차 Edn 2013)에서 제공 한 것입니다. AFAIK는 Apple에서 시스템 헤더로 제공 한 적이 없습니다. ( /usr/include여전히 Mojave를 실행하는 시스템 에는 없습니다 .) 한 번 설치된 경우 /usr/includeApple에서 제공하지 않고 수동으로 생성했을 수 있습니다. 따라서 /usr/local/include이전 에 설치되어 있어야 합니다.
Jonathan Leffler

순진한 질문을 용서하지만 이번 주에는 C ++에 손을 대었습니다. 종속성 / 헤더는 C ++에서 수동으로 관리됩니까? 그렇다면, 모든 의존성 / 헤더를 넣어야 /usr/include합니까?
Matthew Barbara

1
Q1 : 다소. 의미하는 바에 따라 조금씩 다르지만, 작업중인 시스템에서 헤더가 표준이 아닌 경우 C 또는 C ++의 종속성 및 헤더에 대해 걱정해야합니다. 그렇다면 무엇이 표준인가? 그리고 가장 좋은 대답은 "의존적"이며 '플랫폼'(O / S, 컴파일러)을 포함한 많은 요소에 의존합니다. Q2는 "아니요, 보통 아무 것도 넣지 말아야합니다 /usr/include"– /usr/local/include대신에 사용하십시오. 일반적으로, 떠나 가장 안전 /usr/include하고 /usr/lib혼자와 재료에 따라 추가 /usr/local대신.
Jonathan Leffler

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. 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.