28 votes

Pourquoi /usr/include est-il absent ? J'ai installé Xcode et Command Line Tools (Mojave).

Je viens de passer de High Sierra à Mojave et j'ai installé Xcode ainsi que ses outils de ligne de commande et ses outils supplémentaires. Rien ne compile à partir du terminal, tout indique que /usr/include est manquant !

J'ai vérifié et TOUS les répertoires liés à Dev sous /usr sont manquants !

Une idée de la façon de réparer ?

23voto

Nicholas Smith Points 2353

Vous devez exécuter une autre étape après avoir installé les outils de ligne de commande :

sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /

Pourquoi ? Apple a introduit un nouvel outil de construction dans - les inclusions système ne sont plus conservées que sous le chemin d'un SDK spécifique à partir de Xcode 10 :

Le paquet Command Line Tools installe les en-têtes du système MacOS à l'intérieur du SDK MacOS. Les logiciels qui se compilent avec les outils installés rechercheront les en-têtes dans le SDK MacOS [...] fournis par Xcode [...] ou Command Line Tools [...] selon ce qui est sélectionné avec xcode-select.

[...]

Par défaut, les outils de la ligne de commande recherchent les en-têtes du système dans le SDK. Cependant, certains logiciels peuvent ne pas être construits correctement avec le SDK et nécessiter l'installation d'en-têtes MacOS dans le système de base sous /usr/include [soulignement ajouté]. Si vous êtes le responsable de ce type de logiciel, nous vous encourageons à mettre à jour votre projet pour qu'il fonctionne avec le SDK ou à déposer un rapport de bogue pour les problèmes qui vous empêchent de le faire. Comme solution de contournement, un paquet supplémentaire est fourni pour installer les en-têtes sur le système de base. Dans une prochaine version, ce paquet ne sera plus fourni. Vous pouvez trouver ce paquetage à l'adresse suivante /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

Pour vous assurer que vous utilisez la version prévue des outils de la ligne de commande, exécutez xcode-select -s <path to Xcode> ou xcode select -s /Library/Developer/CommandLineTools après l'installation.

4 votes

Nicholas Smith : Comment l'avez-vous découvert ?

4 votes

Je n'ai même pas d'annuaire Packages !

0 votes

Je l'ai vu sur StackOverflow à un moment donné et il m'est resté en tête.

6voto

Perry Points 161

Le "pourquoi" est qu'Apple n'a plus besoin d'avoir un /usr/include distinct du SDK. Vous ne devriez pas compter sur le fait de l'avoir à l'avenir.

Les compilateurs savent déjà trouver leurs includes dans le SDK, il n'y a donc plus vraiment besoin du répertoire /usr/include. Vous pouvez trouver le répertoire d'installation du SDK pour les fichiers d'inclusion en utilisant xcrun --show-sdk-path

5 votes

Cela est-il documenté quelque part ?

1 votes

A l'exception du fait que MacOS est (était) certifié unix04.

2 votes

La conformité avec la spécification unique Unix ou POSIX n'exige pas que /usr/include soit présent dans le système de fichiers.

6voto

ssnobody Points 176

Ajouter le -isysroot à vos drapeaux de compilation afin d'inclure automatiquement le répertoire d'en-tête SDK approprié et d'éviter le recours à l'option /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg qui "dans une prochaine version, ... ne sera plus fourni".

Exemples :

-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk

ou

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

Vous pouvez utiliser xcrun --show-sdk-path pour trouver le chemin du SDK par défaut.

Vous pouvez également utiliser les versions /usr/bin/ de clang, clang++, cc, c++, gcc, g++ installées par Xcode ou CommandLineTools qui sont des cales appelant xcrun pour invoquer le bon outil avec le bon SDK et les bons répertoires d'inclusion. Par défaut, il s'agit de CommandLineTools si vous l'avez installé.

Vous pouvez changer le comportement pour utiliser Xcode en :

$ sudo xcode-select -s /Applications/Xcode.app/Contents/Developer

ou revenir en arrière :

$ sudo xcode-select -s /Library/Developer

0 votes

Vous pouvez également utiliser -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk si vous souhaitez simplement utiliser la valeur par défaut. Cependant, dans la plupart des cas, vous devriez probablement chercher à savoir pourquoi le compilateur C que vous utilisez ne détecte pas les bons drapeaux (vous devriez probablement utiliser clang du SDK au lieu de celui que vous utilisez).

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