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

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있습니까?



답변

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

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


답변

계속하기 전에 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

무시해도 괜찮습니다. 그게 다야.


답변

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옵션이 없으면 표시되지 않음 ).


답변

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


답변

나는 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


답변

내 경우에는 내가 가진 것 같았다 llvm그리고 gcc또한 사제를 사용하여 설치. 그것들을 제거하고 macOS clang에 완전히 의존했을 때 헤더를 찾을 수 있었고 컴파일이 다시 작동했습니다.


답변

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

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