web-dev-qa-db-fra.com

MacOS "configure: erreur: impossible d'exécuter des programmes compilés en C"

Je suis assez nouveau dans l'environnement MacOS et j'ai déjà rencontré des problèmes lors de la compilation de scripts C. J'ai eu le problème suivant:

fatal error: stdio.h: No such file or directory
 #include <stdio.h>
                   ^
compilation terminated.

J'ai essayé de réinstaller xcode-select --install mais continue à me dire

xcode-select: erreur: les outils de ligne de commande sont déjà installés, utilisez "Software Update" pour installer les mises à jour

J'ai tout mis à jour et rien. Apparemment, c'est parce que je n'ai pas le /usr/includes fichier. J'ai trouvé un moyen de compiler mon logiciel en utilisant

/Library/Developer/CommandLineTools/usr/bin/g++ XXXX.cpp

Cependant, maintenant j'essaie de ./compile et make un autre logiciel mais je ne sais pas comment utiliser cet interpréteur gcc par défaut. Quand j'essaye de ./configure j'ai obtenu cette erreur

configure: erreur: impossible d'exécuter des programmes compilés en C. Si vous vouliez effectuer une compilation croisée, utilisez '--Host'. Voir 'config.log' pour plus de détails

Donc quand je regarde config.log:

configure:3224: checking for gcc
configure:3240: found /usr/local/bin/gcc
configure:3251: result: gcc
configure:3282: checking for C compiler version
configure:3291: gcc --version >&5
gcc (GCC) 4.9.2 20141029 (prerelease)
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

configure:3302: $? = 0
configure:3291: gcc -v >&5
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-Apple-darwin14.0.0/4.9.2/lto-wrapper
Target: x86_64-Apple-darwin14.0.0
Configured with: ../gcc-4.9-20141029/configure --enable-languages=c++,fortran
Thread model: posix
gcc version 4.9.2 20141029 (prerelease) (GCC) 
configure:3302: $? = 0
configure:3291: gcc -V >&5
gcc: error: unrecognized command line option '-V'
gcc: fatal error: no input files
compilation terminated.
configure:3302: $? = 1
configure:3291: gcc -qversion >&5
gcc: error: unrecognized command line option '-qversion'
gcc: fatal error: no input files
compilation terminated.
configure:3302: $? = 1
configure:3322: checking whether the C compiler works
configure:3344: gcc    conftest.c  >&5
configure:3348: $? = 0
configure:3396: result: yes
configure:3399: checking for C compiler default output file name
configure:3401: result: a.out
configure:3407: checking for suffix of executables
configure:3414: gcc -o conftest    conftest.c  >&5
configure:3418: $? = 0
configure:3440: result: 
configure:3462: checking whether we are cross compiling
configure:3470: gcc -o conftest    conftest.c  >&5
conftest.c:15:19: fatal error: stdio.h: No such file or directory
 #include <stdio.h>
                   ^
compilation terminated.
configure:3474: $? = 1
configure:3481: ./conftest
./configure: line 3483: ./conftest: No such file or directory
configure:3485: $? = 127
configure:3492: error: in `/Users/XXXX/phyml':
configure:3494: error: cannot run C compiled programs.
If you meant to cross compile, use `--Host'.
See `config.log' for more details

Avez-vous des idées sur la façon de résoudre ce problème?

Merci beaucoup !

8
Eddie

Il est vraiment facile de manquer la réponse de melpomene dans les petits commentaires de cette question, alors laissez-moi poster ceci ici pour que tout le monde puisse le voir. Cette erreur signifie généralement qu'il vous manque des outils de compilation (en-têtes en fait) qui ont été supprimés de Xcode.

Vous pouvez les trouver dans /Library/Developer/CommandLineTools/Packages/ Car leur nom pourrait être différent en fonction de votre version de macOS à l'avenir.

En supposant que vous exécutez macOS Mojave (10.14), vous devez exécuter:

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

Et un programme d'installation de package de style macOS démarre, vous demandant votre mot de passe administrateur. Il s'agit d'un package officiel Apple et bien qu'il puisse être étrange d'installer quelque chose à partir d'un répertoire aléatoire, vous pouvez lui faire confiance. Vous n'êtes pas obligé de prendre ma Parole pour cela. Apple a enterré cette modification dans les notes de publication de Xcode 10 et vous pouvez trouver leur explication ici: https://developer.Apple.com/documentation/xcode_release_notes/xcode_10_release_notes#303562

Je vais reproduire ceci ici au cas où ce lien disparaîtrait ou serait changé:

Le package des outils de ligne de commande installe les en-têtes du système macOS dans le SDK macOS. Le logiciel qui compile avec les outils installés recherchera les en-têtes dans le SDK macOS fourni par l'un ou l'autre 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

selon ce qui est sélectionné à l'aide de xcode-select.

Les outils de ligne de commande rechercheront par défaut dans le SDK les en-têtes système. Cependant, certains logiciels peuvent échouer à se construire correctement avec le SDK et nécessiter l'installation des en-têtes macOS dans le système de base sous/usr/include. Si vous êtes le mainteneur d'un tel logiciel, nous vous encourageons à mettre à jour votre projet pour travailler avec le SDK ou à déposer un rapport de bogue pour les problèmes qui vous en empêchent. Comme solution de contournement, un package supplémentaire est fourni pour installer les en-têtes sur le système de base. Dans une future version, ce package ne sera plus fourni. Vous pouvez trouver ce package sur:

/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 ligne de commande, exécutez xcode-select -s ou xcode select -s/Library/Developer/CommandLineTools après l'installation.

10
Olivier Lacan