web-dev-qa-db-fra.com

Où sont les en-têtes C dans MacOS Mojave?

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.

6
Matthieu Brucher

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
2
olehermanse

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

2
mpmeyer

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.

0
Eric Postpischil