web-dev-qa-db-fra.com

Impossible de compiler le programme C sur un Mac après la mise à niveau vers Mojave

J'ai utilisé la commande gcc sur le terminal pour compiler les programmes C, mais tout à coup, après une mise à jour du système d'exploitation de mon Mac (macOS 10.14 Mojave et XCode 10.0), j'ai commencé à recevoir le message suivant:

test.c:8:10: fatal error: stdio.h: No such file or directory
#include <stdio.h>
         ^~~~~~~~~
compilation terminated.

J'ai déjà installé gcc car je peux le trouver dans /usr/local/bin et il y a vraiment un gcc dedans. J'ai essayé d'exécuter le même fichier sur mon autre iMac et cela a fonctionné sans problème.

J'ai essayé de lancer xcode-select --install et il était déjà installé. Par conséquent, le problème que je rencontre maintenant n'a pas été résolu. Je suppose que le chemin est gâché car il ne semble pas qu'il puisse trouver gcc après avoir commencé à copier et coller des commandes à partir d'autres ressources pour résoudre ce problème.

Voudrait de l'aide sur ceci.

125
Maxxx

TL; DR

Assurez-vous d'avoir téléchargé le dernier package "Outils de ligne de commande" et exécutez-le à partir d'un terminal (ligne de commande):

_open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg
_

Extraire une réponse semi-cohérente à partir de commentaires assez volumineux…

Préambule

Très souvent, _xcode-select --install_ a été la solution correcte, mais cela ne semble pas aider cette fois-ci. 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.

Je remarque que si votre GCC est installé dans _/usr/local/bin_, vous n’utilisez probablement pas le GCC à partir de Xcode; normalement installé dans _/usr/bin_.

Moi aussi j'ai mis à jour 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 à la maison qui ne trouve pas les en-têtes dans _/usr/include_, qui est parallèle à votre problème avec _/usr/local/bin/gcc_ ne trouve pas d’en-têtes non plus.

J'ai fait un peu de comparaison, et ma machine Mojave n'a pas de _/usr/include_ du tout, mais _/usr/bin/clang_ est capable de compiler correctement. Un en-tête (__stdio.h_, avec le tiret bas) était dans mon ancien _/usr/include_; il manque maintenant (d'où mon problème avec GCC 8.2.0). J'ai exécuté _xcode-select --install_ et il a été écrit "_xcode-select: note: install requested for command line developer tools_", puis un programme d'installation à interface graphique m'a montré une licence que j'ai approuvée. Il a également téléchargé et installé les outils de ligne de commande.

J'ai ensuite exécuté l'interface graphique Xcode (command-space, Xcode, return) et il a été dit qu'il fallait installer un logiciel supplémentaire, mais toujours pas de _/usr/include_. Mais je peux compiler avec _/usr/bin/clang_ et _/usr/bin/gcc_ - et l'option _-v_ suggère qu'ils utilisent

_InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
_

Solution de travail

Alors Maxxxnoté :

J'ai trouvé un moyen. Si nous utilisons Xcode 10, vous remarquerez que si vous accédez à _/usr_ dans le Finder, vous ne verrez plus de dossier appelé 'include', ce qui explique pourquoi le terminal se plaint de l'absence de l'en-tête. les fichiers contenus dans le dossier 'include'. Dans le Notes de version de Xcode 10. , 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 dossier _/usr/include_ soit installé. Ensuite, vous devriez être prêt à partir.

Quand tout le reste échoue, lisez le manuel ou, dans ce cas, les notes de version. Je ne suis pas terriblement surpris de constater que Apple souhaite tourner le dos à leur héritage Unix, mais je suis déçu. S'ils font attention, ils pourraient me chasser. Merci pour l'information.

Ayant installé le paquet à l’aide de la commande suivante sur la ligne de commande, j’ai à nouveau _/usr/include_ 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 commentaire , vous devez télécharger le package Outils en 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 obtenir le téléchargement. Une fois le téléchargement terminé, installez le package Outils de ligne de commande. Installez ensuite les en-têtes comme décrit dans la section 'Solution de travail'.

Cela a fonctionné pour moi sur Mojave 10.14.1. J'avais déjà téléchargé ce document auparavant, mais j'avais déjà oublié de répondre à cette question.

Mise à niveau vers Mojave 10.14.4 et Xcode 10.2

Le 2019-05-17 ou vers cette date, j'ai mis à jour 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 à 10.2). La commande open ci-dessus a corrigé les en-têtes manquants. La mise à niveau du Xcode principal vers 10.2 peut encore être source d'aventures, puis la réinstallation des outils de ligne de commande et du package d'en-têtes.

Mise à niveau vers Xcode 10.3 (pour Mojave 10.14.6)

Le 2019-07-22, j'ai été informé via l'App Store que la mise à niveau vers Xcode 10.3 était disponible et qu'elle incluait des SDK pour iOS 12.4, tvOS 12.4, watchOS 5.3 et macOS Mojave 10.14.6. Je l'ai installée sur l'une de mes machines 10.14.5, je l'ai exécutée et j'ai installé des composants supplémentaires comme suggéré, 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 du logiciel), avec un paquet IIRC (Command Line Utilities) (il a été téléchargé et installé automatiquement). Une fois de plus, l’installation de la mise à jour o/s avait effacé _/usr/include_, mais la commande open en haut de la réponse l’a rétablie. La date que j'avais dans le fichier pour la commande open était le 2019-07-15.

214
Jonathan Leffler

Après avoir essayé chaque réponse que je pouvais trouver ici et en ligne, je continuais à recevoir des erreurs pour certains en-têtes manquants. En essayant de compiler pyRFR, je rencontrais des erreurs sur le fait que stdexcept n'était pas trouvé, ce qui n'était apparemment pas installé dans /usr/include avec les autres en-têtes. Cependant, j'ai trouvé où il se cachait dans Mojave et j'ai ajouté ceci à la fin de mon fichier ~/.bash_profile:

export CPATH=/Library/Developer/CommandLineTools/usr/include/c++/v1

Cela fait, je peux maintenant compiler pyRFR et d’autres programmes C/C++. Selon echo | gcc -E -Wp,-v -, gcc cherchait ces en-têtes à l'ancien emplacement (sans le /c++/v1), mais pas le nouvel emplacement, ce qui l'a corrigé en ajoutant à CFLAGS.

21
Nigel

Le problème est que Xcode, en particulier Xcode 10.x, n’a pas tout installé, alors assurez-vous que les outils de ligne de commande sont installés, tapez ceci dans un terminal Shell:

xcode-select --install

démarrez également Xcode et assurez-vous que toute l’installation requise est installée (vous devriez recevoir un message si ce n’est pas le cas.) et comme Xcode 10 n’installe pas le SDK Mac OS complet, exécutez le programme d’installation à

/Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

car ce paquet n’est pas installé par Xcode 10.

8
James Rinkevich

Assurez-vous de vérifier Préférences Xcode -> Emplacements.

Les outils de ligne de commande que j'avais sélectionnés correspondaient à la version précédente de Xcode (8.2.1 au lieu de 10.1)

3
bitbrane

J'ai trouvé une excellente solution et une explication à ce sujet commentaire de GitHub . L'astuce:

make SDKROOT=`xcrun --show-sdk-path` MACOSX_DEPLOYMENT_TARGET=

A fait le travail.

3
Rob

Avait des problèmes similaires à ceux du PO

Problème

chat bonjour.c

#include <stdlib.h>
int main() { exit(0); }

clang hello.c

/usr/local/include/stdint.h:2:10: error: #include nested too deeply
etc...

Tentative de réparation

J'ai installé la dernière version de XCode, cependant, les notes de publication indiquaient que le fichier mentionné dans le correctif précédent, de Jonathan ici, n'était plus disponible.

open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

Détails ici https://developer.Apple.com/documentation/xcode_release_notes/xcode_10_release_notes , sous la section Nouvelles fonctionnalités .


Solution qui a fonctionné pour moi ...

En utilisant les détails de ce commentaire, https://github.com/SOHU-Co/kafka-node/issues/881#issuecomment-396197724

J'ai trouvé que brew doctor a signalé que j'avais des inclus dans mon dossier /usr/local/.

Donc, pour résoudre ce problème, j’ai utilisé la commande fournie par l’utilisateur HowCrazy , pour rechercher les inclusions non utilisées et les déplacer dans un dossier temporaire.

Répété ici ...

mkdir /tmp/includes
brew doctor 2>&1 | grep "/usr/local/include" | awk '{$1=$1;print}' | xargs -I _ mv _ /tmp/includes

Après l'exécution des scripts, le problème du fichier d'inclusion avait disparu. nb: J'ai commenté cette question ici aussi.

2
mlo55

J'avais ce problème et rien n'a fonctionné. J'ai exécuté xcode-select --install et également installé /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg.

BACKGROUND

Comme j'avais des problèmes avec App Store sur un nouvel ordinateur portable, j'ai été obligé de télécharger le Xcode Beta installez le site Web Apple pour installer Xcode en dehors de App Store . Donc, je n'avais que Xcode Beta installé.

SOLUTION

Cela (je pense) faisait que clang ne trouve pas le répertoire SDKROOT/Applications/Xcode.app/...., car il n'y a pas de Beta dans le chemin, ou peut-être Xcode Beta ne l'installe tout simplement pas (je ne sais pas). Pour résoudre le problème, je devais supprimer Xcode Beta et résoudre l'App Store problème pour installer la version.

tldr;

Si vous avez Xcode Beta , essayez de tout nettoyer et d'installer la version avant d'essayer les solutions qui fonctionnent pour d'autres personnes.

1
Sergio Pulgarin