Erreur Gcc: gcc: erreur lors de la tentative d'exécution de 'cc1': execvp: aucun fichier ou répertoire de ce type


102

J'ai utilisé avec succès gcc sur Linux Mint 12. Maintenant, j'obtiens une erreur. J'ai récemment fait des builds .so et installé Clang il n'y a pas si longtemps, mais j'ai compilé avec succès depuis ces deux événements, donc je ne sais pas ce qui a changé. J'ai utilisé le gestionnaire de logiciels GUI pour supprimer puis réinstaller gcc, mais les résultats sont les mêmes:

~/code/c/ut: which gcc                                                                                                     
/usr/bin/gcc

~/code/c/ut: gcc -std=c99 -Wall -Wextra -g -c object.c                                                                      
gcc: error trying to exec 'cc1': execvp: No such file or directory

Réponses:


70

Explication

Le message d'erreur nous a dit que la dépendance au moment de la construction (dans ce cas, elle l'est cc1) n'a pas été trouvée, donc tout ce dont nous avons besoin - installer le package approprié sur le système (en utilisant le gestionnaire de packages // à partir des sources // d'une autre manière)

Qu'est-ce que cc1:

cc1est la commande interne qui prend les fichiers pré-traités en langage C et les convertit en assemblage. C'est la partie réelle qui compile C. Pour C ++, il y a cc1plus et d'autres commandes internes pour différents langages.

tiré de cette réponse par Alan Shutko .

Solution pour: Ubuntu / Linux Mint

sudo apt-get update
sudo apt-get install --reinstall build-essential

Solution pour: environnement Docker-alpin

Si vous êtes dans un environnement docker-alpine , installez le package build-base en ajoutant ceci à votre Dockerfile:

RUN apk add build-base

Meilleur nom de package fourni par Pablo Castellano . Plus de détails ici .

Si vous avez besoin de plus de packages à des fins de construction, envisagez d'ajouter le package alpine-sdk :

RUN apk add alpine-sdk

Tiré de github

Solution pour: CentOS / Fedora

Cette réponse contient des instructions pour CentOS et Fedora Linux

Solution pour: Amazon Linux

sudo yum install gcc72-c++

Tiré de ce commentaire par CoderChris

Vous pouvez également essayer d'installer les dépendances manquées par ceci ( cependant, on dit que cela ne résout pas le problème ):

sudo yum install gcc-c++.noarch

Tiré de cette réponse



63

Sur debian / ubuntu, j'ai résolu ce problème en réinstallant build-essential:

sudo apt-get update
sudo apt-get install --reinstall build-essential

1
Dans le journal de ´ - reinstall build-essential´ mon ubuntu a spécifiquement déclaré "Configurer g ++ (4: 6.1.1-1ubuntu2) ... update-alternatives: en utilisant / usr / bin / g ++ pour fournir / usr / bin / c ++ (c ++) en mode automatique "
Paamand

Cela m'a corrigé sur le droplet Debian DigitalOcean.com. Je n'ai eu qu'à exécuter la deuxième commande affichée et après ce gcc compilé par le fichier .cpp parfaitement.
raddevus

1
@mchid Rien de mal - Cela a résolu le problème. Je voulais juste préciser quelle partie de votre suggestion était liée au problème. Par exemple, si votre réponse ne fonctionnait pas pour quelqu'un, ils pourraient utiliser l'alternative de mise à jour spécifique pour le gcc.
Paamand

26

En effet, il gccappelle de nombreux autres exécutables pour terminer le traitement de l'entrée et cc1ne se trouve pas dans le chemin inclus.

Sur le type de coque whereis cc1. Si cc1est trouvé, il vaut mieux continuer et créer un lien logiciel dans le répertoire de gcc; sinon, cc1n'est pas installé et vous devez installer gcc-c ++ à l'aide du gestionnaire de packages.


2
Merci pour la réponse. whereis cc1 ne renvoie rien. J'ai installé gcc et gcc-4.4, gcc-4-6, libgcc1 selon Software Manager. Je viens d'installer g ++, mais j'obtiens toujours l'erreur.
Scooter du

2
voir si l'exécutable est présent dans / usr / local / libexec / gcc / <architecture> / <compiler> / <compiler_version> / cc1 sinon pour une utilisation temporaire, accédez à / usr / bin et créez un lien parln -s cc cc1
perilbrain

Je n'ai pas de répertoire / usr / local / libexec. Il n'y a pas de "gcc" trouvé sous / usr / local.
Scooter du

1
GCC est sous / usr / bin et là vous allez aussi cc, exécuter la commande mentionnée dans le commentaire précédent dans ce répertoire.
perilbrain

2
Les binaires cc1 / cc1plus ne sont PAS censés être dans $ PATH.
zwol

16

Amazon Linux: résolution du problème GCC

Puisque cela apparaît comme le premier résultat sur Google, je voulais juste documenter mon expérience avec Amazon Linux. L'installation a gcc-c++.noarchrésolu le problème:

sudo yum install gcc-c++.noarch

Certaines personnes ont également signalé cette alternative comme une solution:

sudo yum install gcc72-c++


2
Certainement mon problème sur Amazon Linux, mais hélas, .noarchest déjà installé.
ragerdl

10
sudo yum install gcc72-c ++ l'a trié pour moi sur Amazon Linux
CoderChris

Heureux que quelqu'un parle d'Amazon Linux, mais aucune de ces solutions n'a fonctionné pour moi ...
John Chrysostom

1
Sur "Amazon Linux AMI 2018.03", yum install gcc72-c ++ est ce dont j'avais besoin aussi.
Nick Lothian

1
sudo yum install gcc72-c ++ fonctionne pour moi. Merci beaucoup
Ilyas

13

J'ai rencontré un problème similaire aujourd'hui - un collègue ne pouvait pas créer son logiciel mais je pouvais le créer. Quand il a couru, gccil n'a pas pu trouver cc1.

Son chemin exécutable semblait raisonnable mais le fait que je ne puisse pas facilement reproduire l'échec suggérait quelque chose dans son environnement comme cause.

Finalement, nous avons trouvé GCC_EXEC_PREFIXdéfini dans son environnement qui était le coupable et était trompeur gccdans la recherche cc1. Cela faisait partie de ses scripts de démarrage shell et visait à contourner une limitation sur un système SPARC / Solaris qui n'est plus utilisé. Le problème a été résolu en ne définissant pas cette variable d'environnement.

http://gcc.gnu.org/onlinedocs/gcc/Environment-Variables.html


Exact même problème .. toujours non résolu! Cela s'est produit après le portage du projet de 16.04LTS à 18.04LTS.
Shaze

11

J'ai résolu ce problème en installant explicitement g ++:

sudo apt-get install g++

Un problème a été rencontré sur Ubuntu 12.04 lors de l'installation de pandas. (Merci perilbrain.)


5

yum install gcc-c++ fait le correctif.


1
duplicata d'une réponse existante (actuellement la plus votée, publiée un an avant celle-ci). Les réponses «Merci» ou «moi aussi» ne sont que du désordre.
Peter Cordes

4

Assurez-vous que votre GCC_EXEC_PREFIX(env)n'est pas exporté et que votre PATHest exporté vers la bonne chaîne d'outils.


2

J'ai expérimenté cela peu de temps après avoir compilé et installé un nouveau GCC brillant - version 8.1 - sur RHEL 7. En fin de compte, cela a fini par être un problème de permissions; mon umask racine était le coupable. J'ai finalement trouvé cc1caché dans /usr/local/libexec:

[root@nacelle gdb-8.1]# ls -l /usr/local/libexec/gcc/x86_64-pc-linux-gnu/8.1.0/ | grep cc1
-rwxr-xr-x 1 root root 196481344 Jul  2 13:53 cc1

Cependant, les autorisations sur les répertoires qui y mènent n'autorisaient pas mon compte utilisateur standard:

[root@nacelle gdb-8.1]# ls -l /usr/local/libexec/
total 4
drwxr-x--- 3 root root 4096 Jul  2 13:53 gcc
[root@nacelle gdb-8.1]# ls -l /usr/local/libexec/gcc/
total 4
drwxr-x--- 3 root root 4096 Jul  2 13:53 x86_64-pc-linux-gnu
[root@nacelle gdb-8.1]# ls -l /usr/local/libexec/gcc/x86_64-pc-linux-gnu/
total 4
drwxr-x--- 4 root root 4096 Jul  2 13:53 8.1.0

Un rapide récursif chmodpour ajouter des autorisations de lecture / exécution du monde l'a corrigé:

[root@nacelle 8.1.0]# cd /usr/local/libexec
[root@nacelle lib]# ls -l | grep gcc
drwxr-x---  3 root root     4096 Jul  2 13:53 gcc
[root@nacelle lib]# chmod -R o+rx gcc
[root@nacelle lib]# ls -l | grep gcc
drwxr-xr-x  3 root root     4096 Jul  2 13:53 gcc

Et maintenant gccpeut trouver cc1quand je lui demande de compiler quelque chose!


1

Cela peut également être le message d'erreur affiché si vous essayez d'exécuter des binaires gcc 32 bits sur un système d'exploitation 64 bits et une glibc 32 bits manquante. D'après ce fichier readme : "Pour les systèmes 64 bits, une libc 32 bits et des libncurses sont nécessaires pour exécuter les outils.". Dans ce cas, il n'y a pas de problème avec le chemin et cc1 est effectivement trouvé, mais signalé comme manquant comme aucune glibc 32 bits.


1

Ce qui m'a aidé, c'est d'utiliser à la llvm-gccplace:

ln -s $(which llvm-gcc) /usr/local/bin/gcc

1

Juste pour documenter mon problème avec ce problème, même si cela semble être un exemple spécifique d'autres réponses; en tant que débutant relatif, je pense que cela pourrait aider les autres.

Solution:

J'ai ajouté '/ usr / bin' au début de PATH pour une seule session en utilisant PATH='/usr/path/:$PATH'et tout a commencé à fonctionner correctement.

J'ai utilisé gedit pour mettre à jour le PATH de manière permanente, après m'être assuré qu'il ne briserait pas mes chaînes d'outils habituelles.

Explication:

J'ai plusieurs chaînes d'outils installées sur Ubuntu 14.04LTS et j'en utilise régulièrement quelques-unes. Quand j'ai essayé d'utiliser gcc à partir de la ligne de commande, j'ai eu le problème décrit par l'OP. '/ usr / bin' est dans le PATH mais il est derrière les autres emplacements de la chaîne d'outils. Il s'avère que le cc1 de ces autres chaînes d'outils est incompatible avec gcc.


1

Juste pour compléter la réponse de @ maxkoryukov concernant Alpine.

L'équivalent de Debian build-essentialdans Alpine est build-base. En fait, ce qui précède alpine-sdkdépend de build-base.

/ # apk info -R build-base
build-base-0.5-r1 depends on:
binutils
file
gcc
g++
make
libc-dev
fortify-headers

/ # apk info -R alpine-sdk
alpine-sdk-1.0-r0 depends on:
abuild
build-base
git

0

Vous pouvez résoudre ce problème en exécutant ceci: Sur Fedora:

sudo dnf install redhat-rpm-config

0

J'ai rencontré ce problème sur une installation relativement récente de Fedora 27. J'ai essayé toutes les autres suggestions ou leurs équivalents; l'installation des différents paquets a soit dit "déjà installé" ou installé quelque chose de nouveau qui n'a pas aidé.

Fixé avec

# dnf remove gcc
# dnf install gcc gcc-c++

0

Sur Scientific Linux 6 (similaire à CentOS 6 - SL est maintenant remplacé par CentOS, AIUI), j'ai dû utiliser /usr/sbin/prelink -av -mRce que j'ai trouvé suggéré à https://stelfox.net/blog/2014/08/dependency-prelink-issues/

Jusqu'à ce que je fasse cela, j'ai eu une erreur cc1 gcc: error trying to exec 'cc1': execvp: No such file or directorylorsque j'ai essayé de compiler, et gcc --version a signalé 4.2.2 au lieu de 4.4.7, bien que cette version ait été rapportée par yum.

Cela peut ou non être lié, mais le système manquait d'espace sur / var


0

C'est dans ce package (Ubuntu 19.04):

  sudo apt install g++-6

Vous n'avez pas besoin d'installer une ancienne version de G ++; tout g++est très bien. Ou mieux, build-essentialtire aussi quelques bibliothèques.
Peter Cordes

0

Dans mon cas rare, c'est color wrapperqui a gâté gcc. Résolu en désactivant l' cwexclusion de son répertoire /usr/libexec/cwde PATHla variable d'environnement.


0

Pourquoi cela arrive-t-il? Lorsque vous installez une nouvelle copie de Linux, le compilateur gcc est livré avec lui. Il ne contient que les fichiers et les binaires qui sont utilisés pour exécuter Linux (pour économiser de l'espace et du temps, évidemment).

Comment résoudre cette erreur? Tout ce dont vous avez besoin est de mettre à jour vos packages via le gestionnaire de packages et de réinstaller les packages essentiels à la construction. Les commandes peuvent être différentes selon les noyaux.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.