22 votes

/usr/include manquant sur macOS Catalina (avec Xcode 11)

Suite à le même problème sur Mojave.

Après avoir mis à niveau vers macOS Catalina, aucun des en-têtes C ne peut être trouvé dans /usr/include. La raison de ceci peut être trouvée dans les notes de version de Xcode 10 (version précédente) :

Le package des Outils de ligne de commande installe les en-têtes du système macOS à l'intérieur du SDK macOS. Les logiciels qui compilent avec les outils installés rechercheront les en-têtes à l'intérieur du SDK macOS fourni soit par Xcode à :

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk

ou les Outils de ligne de commande à :

/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk

[...] En tant que solution de contournement, un package supplémentaire est fourni qui installera les en-têtes sur le système de base. Dans une future version, ce package ne sera plus fourni. [...]

(Voir le lien vers la question ci-dessus pour les détails sur cette solution de contournement suggérée.)

Apparemment, Apple a tenu sa menace avec Xcode 11. Comment peut-on installer les en-têtes C dans /usr/include sur macOS Catalina en utilisant Xcode 11?

Contexte : La liaison python de clang recherche les fichiers d'en-tête dans /usr/include par défaut. Selon la réponse de kkurian et le commentaire que j'ai fait (en réponse à cette question), il existe plusieurs façons de contrôler ce comportement, si nécessaire.

Question associée : Impossible de compiler un programme C sur un Mac après la mise à niveau vers Mojave.

0 votes

Tu ne le fais pas - ton système de construction doit pointer vers le bon chemin

1 votes

Malheureusement, les liaisons python pour clang ne vous laissent pas beaucoup de choix en la matière...

1 votes

Il semble que cela devrait être signalé comme un bug à clang alors

22voto

ijw Points 101

Définissez la variable d'environnement CPATH dans votre shell (par exemple, mettez ceci dans votre fichier .zshrc si vous utilisez zsh) :

export CPATH=`xcrun --show-sdk-path`/usr/include

Et ensuite essayez de reconstruire votre projet.

MISE À JOUR

L'auteur de la question se demandait comment installer les en-têtes dans /usr/include, pas comment indiquer à clang où se trouvent ces en-têtes.

La Protection de l'intégrité du système de MacOS empêche la création de /usr/include, même par l'utilisateur root. Voir cette réponse connexe.

Si vous avez désactivé SIP (ce qui n'est pas recommandé), alors je pense qu'une commande comme

sudo ln -s `xcrun --show-sdk-path`/usr/include /usr/include

fera l'affaire.

0 votes

Merci d'avoir répondu! Cela fonctionne en effet avec les liaisons python de clang, et, par conséquent, résout mon problème. Pour des raisons de correction, je n'accepterai pas cette réponse, car la question originale sur la façon d'installer les en-têtes C dans /usr/include reste sans réponse. Encore une fois, merci!

0 votes

Jamais l'esprit, clang python continue d'avoir du mal à trouver certains en-têtes, apparemment. Quoi qu'il en soit, cela semble être le matériel pour une nouvelle question. Merci pour l'aide...

1 votes

@mkl J'ai mis à jour la réponse. Merci pour vos commentaires.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X