Il semble que Apple continue de déplacer ses outils et l'ancienne solution d'installation des outils de ligne de commande consiste à utiliser xcode-select --install
ne fonctionne pas.
À Mojave, xcode-select
n'installe plus rien (l'interface graphique ne parvient toujours pas à trouver le package) et les outils de ligne de commande ne s'installent pas dans /usr/
ou /usr/local
.
xcode-select --install
a travaillé pour moi à Mojave. Vous pouvez peut-être essayer d'installer XCode à partir du Mac App Store, puis installer des outils de développement?
En ce qui concerne les emplacements des en-têtes, j'ai des en-têtes de pommes dans /Library/Developer/CommandLineTools/
:
$ Sudo find /Library -name stdio.h
/Library/Developer/CommandLineTools/usr/include/c++/v1/stdio.h
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/stdio.h
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/stdio.h
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/Kernel.framework/Versions/A/Headers/sys/stdio.h
Et si vous installez gcc via brew, il ajoutera des en-têtes dans /usr/local/
:
$ Sudo find /usr -name stdio.h
/usr/local/Cellar/gcc/8.2.0/include/c++/8.2.0/tr1/stdio.h
/usr/local/Cellar/gcc/8.2.0/lib/gcc/8/gcc/x86_64-Apple-darwin17.7.0/8.2.0/include/ssp/stdio.h
/usr/local/Cellar/gcc/8.2.0/lib/gcc/8/gcc/x86_64-Apple-darwin17.7.0/8.2.0/include-fixed/stdio.h
/usr/local/Cellar/gcc/8.1.0/include/c++/8.1.0/tr1/stdio.h
/usr/local/Cellar/gcc/8.1.0/lib/gcc/8/gcc/x86_64-Apple-darwin17.5.0/8.1.0/include/ssp/stdio.h
/usr/local/Cellar/gcc/8.1.0/lib/gcc/8/gcc/x86_64-Apple-darwin17.5.0/8.1.0/include-fixed/stdio.h
/usr/local/Cellar/gcc/7.3.0_1/include/c++/7.3.0/tr1/stdio.h
/usr/local/Cellar/gcc/7.3.0_1/lib/gcc/7/gcc/x86_64-Apple-darwin17.3.0/7.3.0/include/ssp/stdio.h
/usr/local/Cellar/gcc@7/7.3.0/include/c++/7.3.0/tr1/stdio.h
/usr/local/Cellar/gcc@7/7.3.0/lib/gcc/7/gcc/x86_64-Apple-darwin17.5.0/7.3.0/include/ssp/stdio.h
/usr/local/Cellar/gcc@7/7.3.0/lib/gcc/7/gcc/x86_64-Apple-darwin17.5.0/7.3.0/include-fixed/stdio.h
/usr/local/include/c++/8.2.0/tr1/stdio.h
/usr/local/lib/gcc/8/gcc/x86_64-Apple-darwin17.7.0/8.2.0/include/ssp/stdio.h
/usr/local/lib/gcc/8/gcc/x86_64-Apple-darwin17.7.0/8.2.0/include-fixed/stdio.h
(Ce ne sont pas des en-têtes d'Apple, mais GCC/GLIBC).
En utilisant dtruss, je peux voir que Apple clang utilise celui de CommandLineTools/SDKs
:
$ Sudo dtruss -f Sudo -u $USER clang test.c -o test 2>&1
3781/0x51d8: pread(0x3, "#include <stdio.h>\n\nint main(void)\n{\n printf(\"Hello, world\\n\");\n return 0;\n}\n\0", 0x4F, 0x0) = 79 0
3781/0x51d8: __pthread_sigmask(0x3, 0x7FFEE3A7E768, 0x7FFEE3A7E76C) = 0 0
3781/0x51d8: close(0x3) = 0 0
3781/0x51d8: __pthread_sigmask(0x3, 0x7FFEE3A7E76C, 0x0) = 0 0
3781/0x51d8: open("/usr/local/include/stdio.h\0", 0x1000000, 0x1A) = -1 Err#2
3781/0x51d8: open("/Library/Developer/CommandLineTools/usr/lib/clang/10.0.0/include/stdio.h\0", 0x1000000, 0x48) = -1 Err#2
3781/0x51d8: open("/Library/Developer/CommandLineTools/usr/include/stdio.h\0", 0x1000000, 0x37) = -1 Err#2
3781/0x51d8: open("/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/stdio.h\0", 0x1000000, 0x47) = 3 0
Par l'article suivant: https://silvae86.github.io/sysadmin/mac/osx/mojave/beta/libxml2/2018/07/05/fixing-missing-headers-for-homebrew-in-mac -osx-mojave /
Cela installera les en-têtes:
ouvrir /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg
Xcode prend désormais en charge plusieurs SDK et plusieurs installations de Xcode. Les SDK se trouvent dans Xcode.app et Xcode.app est installé par défaut dans les applications mais peut être ailleurs.
xcrun --show-sdk-path
affichera un chemin SDK par défaut, mais il peut y en avoir d'autres. Par exemple, un chemin possible est /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk
. De là, usr/include
contient des en-têtes publics communs tels que les en-têtes C standard, et divers en-têtes Apple sont dans les cadres sous System
.
Dans /Applications/Xcode.app/Contents/Developer/Platforms
, vous trouverez probablement des dossiers pour d'autres plates-formes, comme iPhoneOS.platform
et AppleTVOS.platform
. Parmi ceux-ci, Developer/SDKs
conduit aux SDK pour ces plates-formes.