13 votes

MacOS "configure : error : cannot run C compiled programs" (erreur : ne peut pas exécuter de programmes compilés en C)

Je suis assez nouveau dans l'environnement MacOS et j'ai eu précédemment quelques problèmes pour compiler les scripts en C. J'avais 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 la /usr/includes fichier. J'ai trouvé un moyen de compiler mon logiciel en utilisant

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

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

configure : error : cannot run C compiled programs. Si vous voulez compiler en croisé, utilisez '--host'. Voir 'config.log' pour plus de détails

Donc quand je regarde dans 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 une idée de la façon dont je peux le réparer ?

Merci beaucoup !

17voto

Olivier Lacan Points 554

Il est vraiment facile de manquer la réponse de melpomene dans les petits commentaires à cette question, alors laissez-moi la poster ici pour que tout le monde la voie. Cette erreur signifie généralement qu'il vous manque des outils de compilation (des 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 utilisez macOS Mojave (10.14), vous devez exécuter :

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

Un programme d'installation de paquets de type macOS démarre et vous demande le mot de passe de l'administrateur. Il s'agit d'un paquetage officiel d'Apple et bien qu'il puisse être bizarre d'installer quelque chose à partir d'un répertoire aléatoire, vous pouvez lui faire confiance. Vous n'êtes pas obligé de me croire sur parole. Apple a caché ce changement dans les notes de version de Xcode 10 et vous pouvez trouver leur explication ici : https://developer.apple.com/documentation/xcode_release_notes/xcode_10_release_notes#3035623

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

Le paquet Command Line Tools 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 dans le SDK macOS fourni par Xcode à :

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

ou les outils de ligne de commande à :

/Bibliothèque/Developer/CommandLineTools/SDKs/MacOSX.sdk

en fonction de celui qui est sélectionné à l'aide de 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écessitent que les en-têtes macOS soient installés dans le système de base sous /usr/include. Si vous êtes le responsable d'un tel logiciel, nous vous encourageons à mettre à jour votre projet pour qu'il fonctionne avec le SDK ou à remplir 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 qui installera 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 ligne de commande, exécutez xcode-select -s ou xcode select -s /Library/Developer/CommandLineTools après l'installation.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X