TL; DR
Assurez-vous d'avoir téléchargé le dernier package 'Command Line Tools' et exécutez-le à partir d'un terminal (ligne de commande):
open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg
Pour plus d'informations sur Catalina, consultez Impossible de compiler un programme C sur un Mac après la mise à niveau vers Catalina 10.15 .
Extraire une réponse semi-cohérente à partir de commentaires assez longs…
Préambule
Très souvent, xcode-select --install
a été la bonne solution, mais cela ne semble pas aider cette fois. Avez-vous essayé d'exécuter l'interface graphique principale de Xcode? Il peut installer des logiciels supplémentaires pour vous et nettoyer. Je l'ai fait après l'installation de Xcode 10.0, mais il y a une semaine ou plus, bien avant la mise à niveau vers Mojave.
J'observe que si votre GCC est installé dans /usr/local/bin
, vous n'utilisez probablement pas le GCC de Xcode; qui est normalement installé dans /usr/bin
.
J'ai moi aussi mis à jour vers macOS 10.14 Mojave et Xcode 10.0. Cependant, le système /usr/bin/gcc
et le système /usr/bin/clang
fonctionnent pour moi ( Apple LLVM version 10.0.0 (clang-1000.11.45.2) Target: x86_64-apple-darwin18.0.0
pour les deux.) J'ai un problème avec mon GCC 8.2.0 construit maison qui ne trouve pas d'en-têtes /usr/include
, ce qui est parallèle à votre problème de /usr/local/bin/gcc
ne pas trouver d'en-têtes non plus.
J'ai fait un peu de comparaison, et ma machine Mojave n'en a pas /usr/include
du tout, mais /usr/bin/clang
est capable de compiler OK. Un en-tête ( _stdio.h
, avec un trait de soulignement au début) était dans mon ancien /usr/include
; il manque maintenant (d'où mon problème avec GCC 8.2.0). J'ai couru xcode-select --install
et il a dit " xcode-select: note: install requested for command line developer tools
" et ensuite lancé un programme d'installation GUI qui m'a montré une licence que j'ai acceptée, et il a téléchargé et installé les outils de ligne de commande - ou c'est ce qu'il prétend.
J'ai ensuite exécuté l'interface graphique Xcode (espace de commande, Xcode, retour) et il a dit qu'il fallait installer plus de logiciel, mais toujours non /usr/include
. Mais je peux compiler avec /usr/bin/clang
et /usr/bin/gcc
- et l' -v
option suggère qu'ils utilisent
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
Solution de travail
Puis Maxxx a noté :
J'ai trouvé un moyen. Si nous utilisons Xcode 10, vous remarquerez que si vous naviguez vers le /usr
dans le Finder, vous ne verrez plus de dossier appelé `` inclure '', c'est pourquoi le terminal se plaint de l'absence des fichiers d'en-tête contenus à l'intérieur le dossier «inclure». Dans les notes de publication de Xcode 10.0 , il est indiqué qu'il existe un package:
/Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg
et vous devez installer ce package pour que le /usr/include
dossier soit installé. Alors vous devriez être prêt à partir.
Lorsque tout le reste échoue, lisez le manuel ou, dans ce cas, les notes de version. Je ne suis pas terriblement surpris de voir qu'Apple souhaite tourner le dos à son héritage Unix, mais je suis déçu. S'ils font attention, ils pourraient me chasser. Merci pour l'information.
Après avoir installé le paquet en utilisant la commande suivante sur la ligne de commande, je l'ai de /usr/include
nouveau, et mon GCC 8.2.0 fonctionne à nouveau.
open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg
Téléchargement des outils de ligne de commande
Comme Vesal le souligne dans un commentaire précieux , vous devez télécharger le package Outils de ligne de commande pour Xcode 10.1 sur Mojave 10.14, et vous pouvez le faire à partir de:
Vous devez vous connecter avec un identifiant Apple pour pouvoir obtenir le téléchargement. Une fois le téléchargement terminé, installez le package des outils de ligne de commande. Ensuite, installez les en-têtes comme décrit dans la section «Solution de travail».
Cela a fonctionné pour moi sur Mojave 10.14.1. J'ai dû le télécharger avant, mais j'avais oublié au moment où je répondais à cette question.
Mettre à niveau vers Mojave 10.14.4 et Xcode 10.2
Le 17/05/2019 ou vers cette date, j'ai mis à jour vers Mojave 10.14.4, et les outils de ligne de commande Xcode 10.2 ont également été mis à niveau (ou les outils de ligne de commande Xcode 10.1 ont été mis à niveau vers 10.2). La open
commande ci-dessus a corrigé les en-têtes manquants. Il peut encore y avoir des aventures à venir avec la mise à niveau du Xcode principal vers la version 10.2, puis la réinstallation des outils de ligne de commande et du package d'en-têtes.
Mettre à niveau vers Xcode 10.3 (pour Mojave 10.14.6)
Le 22/07/2019, j'ai été informé via l'App Store que la mise à niveau vers Xcode 10.3 est disponible et qu'elle comprend des SDK pour iOS 12.4, tvOS 12.4, watchOS 5.3 et macOS Mojave 10.14.6. Je l'ai installé sur l'une de mes machines 10.14.5, je l'ai exécuté, et j'ai installé des composants supplémentaires comme il le suggérait, et il semble avoir laissé /usr/include
intact.
Plus tard le même jour, j'ai découvert que macOS Mojave 10.14.6 était également disponible (Préférences Système ⟶ Mise à jour logicielle), avec un package d'utilitaires de ligne de commande IIRC (il a été téléchargé et installé automatiquement). L'installation de la mise à jour o / s a, une fois de plus, effacé /usr/include
, mais la open
commande en haut de la réponse l'a rétablie à nouveau. La date que j'avais dans le fichier pour la open
commande était le 15/07/2019.
Mettre à niveau vers XCode 11.0 (pour Catalina 10.15)
La mise à niveau vers XCode 11.0 ("inclut Swift 5.1 et les SDK pour iOS 13, tvOS 13, watchOS 6 et macOS Catalina 10.15") a été publiée le 21/09/2019. J'ai été informé des `` mises à jour disponibles '', et je les ai téléchargées et installées sur des machines exécutant macOS Mojave 10.14.6 via l'application App Store (onglet Mises à jour) sans problème, et sans avoir à utiliser /usr/include
. Immédiatement après l'installation (avant d'avoir exécuté l'application elle-même), j'ai essayé une recompilation et on m'a dit:
Accepter la licence Xcode / iOS nécessite des privilèges d'administrateur, veuillez exécuter «sudo xcodebuild -license», puis réessayer cette commande.
L'exécution de that ( sudo xcodebuild -license
) m'a permis d'exécuter le compilateur. Depuis lors, j'ai exécuté l'application pour installer les composants supplémentaires dont elle a besoin; toujours pas de problème. Il reste à voir ce qui se passe lorsque je mets à niveau vers Catalina lui-même - mais mes machines macOS Mojave 10.14.6 sont toutes les deux correctes pour le moment (2019-09-24).
echo "#include <a.h>" | gcc -v -x c -