Error de gcc: gcc: error al intentar ejecutar 'cc1': execvp: no existe tal archivo o directorio

102

He estado usando con éxito gcc en Linux Mint 12. Ahora recibo un error. Recientemente he estado haciendo algunas compilaciones .so e instalé Clang no hace mucho, pero he compilado con éxito desde ambos eventos, así que no estoy seguro de qué ha cambiado. Usé el Administrador de software GUI para eliminar y luego instalar gcc nuevamente, pero los resultados son los mismos:

~/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
Scooter
fuente

Respuestas:

69

Explicación

El mensaje de error nos dijo que cc1no se encontró la dependencia del tiempo de compilación (en este caso lo es ), así que todo lo que necesitamos es instalar el paquete apropiado en el sistema (usando el administrador de paquetes // de las fuentes // de otra manera)

Que es cc1:

cc1es el comando interno que toma archivos en lenguaje C preprocesados ​​y los convierte en ensamblador. Es la parte real que compila C. Para C ++, hay cc1plus y otros comandos internos para diferentes lenguajes.

tomado de esta respuesta por Alan Shutko .

Solución para: Ubuntu / Linux Mint

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

Solución para: entorno Docker-alpino

Si se encuentra en un entorno docker-alpine , instale el paquete build-base agregando esto a su Dockerfile:

RUN apk add build-base

Mejor nombre de paquete proporcionado por Pablo Castellano . Más detalles aquí .

Si necesita más paquetes para fines de construcción, considere agregar el paquete alpine-sdk :

RUN apk add alpine-sdk

Tomado de github

Solución para: CentOS / Fedora

Esta respuesta contiene instrucciones para CentOS y Fedora Linux

Solución para: Amazon Linux

sudo yum install gcc72-c++

Tomado de este comentario por CoderChris

También puede intentar instalar las dependencias perdidas con esto ( aunque se dice que no resuelve el problema ):

sudo yum install gcc-c++.noarch

Tomado de esta respuesta

maxkoryukov
fuente
64

En CentOS o Fedora

yum install gcc-c++ 
Antony Hatchkins
fuente
63

En debian / ubuntu solucioné este problema reinstalando build-essential:

sudo apt-get update
sudo apt-get install --reinstall build-essential
mchid
fuente
1
En el registro de ´ - reinstalar build-essential´, mi ubuntu indicó específicamente "Configurando g ++ (4: 6.1.1-1ubuntu2) ... update-alternativas: usando / usr / bin / g ++ para proporcionar / usr / bin / c ++ (c ++) en modo automático "
Paamand
Esto me arregló en la droplet de Debian DigitalOcean.com. Sin embargo, solo tuve que ejecutar el segundo comando que se muestra y luego gcc compilado por el archivo .cpp perfectamente.
raddevus
1
@mchid No pasa nada: solucionó el problema. Solo quería aclarar qué parte de su sugerencia se relaciona con el problema. Por ejemplo, si su respuesta no funcionó para alguien, podría usar la alternativa de actualización específica para gcc.
Paamand
26

Esto se debe a que gccllama a muchos otros ejecutables para completar el procesamiento de la entrada y cc1no está en la ruta incluida.

En tipo de concha whereis cc1. Si cc1se encuentra, es mejor seguir adelante y crear un enlace suave en el directorio de gcc; de lo contrario, cc1no está instalado y debe instalar gcc-c ++ usando el administrador de paquetes.

cerebro peligroso
fuente
2
Gracias por la respuesta. whereis cc1 no devuelve nada. Tengo gcc y gcc-4.4, gcc-4-6, libgcc1 instalados de acuerdo con el Administrador de software. Acabo de instalar g ++, pero sigo recibiendo el error.
Scooter
2
ver si el ejecutable está presente en / usr / local / libexec / gcc / <architecture> / <compiler> / <compiler_version> / cc1 de lo contrario, para uso temporal, navegue a / usr / bin y cree un enlace porln -s cc cc1
perilbrain
No tengo un directorio / usr / local / libexec. No se encuentra "gcc" en / usr / local.
Scooter
1
GCC está en / usr / bin y allí también cc, ejecutará el comando mencionado en el comentario anterior en este directorio.
perilbrain
2
Se supone que los binarios cc1 / cc1plus NO deben estar en $ PATH.
zwol
16

Amazon Linux: solución del problema de GCC

Dado que esto aparece como el primer resultado en Google, solo quería documentar mi experiencia con Amazon Linux. La instalación gcc-c++.noarchsolucionó el problema:

sudo yum install gcc-c++.noarch

Algunas personas también informaron de esta alternativa como solución:

sudo yum install gcc72-c++

Renato Byrro
fuente
2
Definitivamente mi problema en amazon linux, pero por desgracia, .noarchya está instalado.
ragerdl
10
sudo yum install gcc72-c ++ me lo ordenó en Amazon Linux
CoderChris
Me alegra que alguien esté hablando de Amazon Linux, pero ninguna de estas soluciones funcionó para mí ...
John Chrysostom
1
En "Amazon Linux AMI 2018.03", yum install gcc72-c ++ es lo que también necesitaba.
Nick Lothian
1
sudo yum install gcc72-c ++ funciona para mí. Muchas gracias
Ilyas
13

Hoy me encontré con un problema similar: un compañero de trabajo no podía crear su software, pero yo podía hacerlo. Cuando corrió gccno pudo encontrar cc1.

Su ruta ejecutable parecía razonable, pero el hecho de que no pudiera replicar fácilmente la falla sugirió algo en su entorno como la causa.

Finalmente encontramos GCC_EXEC_PREFIXdefinido en su entorno cuál era el culpable y engañoso gccen la búsqueda cc1. Esto era parte de sus scripts de inicio de shell y estaba destinado a solucionar una limitación en un sistema SPARC / Solaris que ya no está en uso. El problema se resolvió al no configurar esta variable de entorno.

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

deaks
fuente
Exactamente el mismo problema ... ¡aún sin resolver! Esto ocurrió después de portar el proyecto de 16.04LTS a 18.04LTS.
Shaze
11

Solucioné este problema instalando explícitamente g ++:

sudo apt-get install g++

Se encontró un problema en Ubuntu 12.04 al instalar pandas. (Gracias perilbrain.)

Mark Chackerian
fuente
5

yum install gcc-c++ hizo la solución.

Suresh Ganta
fuente
1
duplicado de una respuesta existente (actualmente la más votada, publicada un año antes de esta). Las respuestas de "gracias" o "yo también" son un desorden.
Peter Cordes
4

Asegúrese de que su GCC_EXEC_PREFIX(env)no se exporta y PATHse exporta a la cadena de herramientas correcta.

Vijay Nag
fuente
2

Experimenté esto poco después de compilar e instalar un nuevo y brillante GCC, versión 8.1, en RHEL 7. Al final, terminó siendo un problema de permisos; mi umask raíz fue el culpable. Finalmente encontré cc1escondiéndome en /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

Sin embargo, los permisos en los directorios que llevan allí no permitían mi cuenta de usuario estándar:

[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 rápido recursivo chmodpara agregar permisos de lectura / ejecución mundial lo solucionó de inmediato:

[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

¡Y ahora gccpuedo encontrarlo cc1cuando le pido que compile algo!

jefe2000
fuente
1

Este también podría ser el mensaje de error que se muestra si intenta ejecutar binarios gcc de 32 bits en un sistema operativo de 64 bits y falta glibc de 32 bits. Según este archivo Léame : "Para sistemas de 64 bits, se requieren libc y libncurses de 32 bits para ejecutar las herramientas". En este caso, no hay ningún problema con la ruta y cc1 se encuentra realmente, pero se informa que falta como sin glibc de 32 bits.

sfrank
fuente
1

Lo que me ayudó fue usar llvm-gccen su lugar:

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

Solo para documentar mi problema con este problema, aunque parece ser un ejemplo específico de otras respuestas; como relativamente novato, siento que esto podría ayudar a otros.

Solución:

Agregué '/ usr / bin' al comienzo de PATH para una sola sesión de uso PATH='/usr/path/:$PATH'y todo comenzó a funcionar bien.

Usé gedit para actualizar el PATH de forma permanente, después de asegurarme de que no rompería mis cadenas de herramientas habituales.

Explicación:

Tengo varias cadenas de herramientas instaladas en Ubuntu 14.04LTS y utilizo solo un par de forma regular. Cuando intenté usar gcc desde la línea de comando, el OP me describió el problema. '/ usr / bin' está en la RUTA pero está detrás de las otras ubicaciones de la cadena de herramientas. Resulta que el cc1 para esas otras cadenas de herramientas es incompatible con gcc.

J.Sunderland
fuente
1

Solo para complementar la respuesta de @ maxkoryukov con respecto a Alpine.

El equivalente a Debian build-essentialen Alpine es build-base. De hecho, lo anterior alpine-sdkdepende 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
Pablo Castellano
fuente
0

Puede solucionarlo ejecutando esto: En Fedora:

sudo dnf install redhat-rpm-config
victor sosa
fuente
0

Experimenté este problema en una instalación razonablemente nueva de Fedora 27. Probé todas las otras sugerencias o sus equivalentes; la instalación de los distintos paquetes decía "ya instalado" o instaló algo nuevo que no ayudó.

Fijo con

# dnf remove gcc
# dnf install gcc gcc-c++
Wallyk
fuente
0

En Scientific Linux 6 (similar a CentOS 6-- SL ahora se reemplaza por CentOS, AIUI), tuve que usar /usr/sbin/prelink -av -mRlo que encontré sugerido en https://stelfox.net/blog/2014/08/dependency-prelink-issues/

Hasta que hice eso, recibí un error cc1 gcc: error trying to exec 'cc1': execvp: No such file or directory cuando intenté compilar, y gcc --version reportó 4.2.2 en lugar de 4.4.7, a pesar de que yum reportó esa versión.

Puede o no estar relacionado, pero el sistema se había quedado sin espacio en / var

Russell Jones
fuente
0

Está en este paquete (Ubuntu 19.04):

  sudo apt install g++-6
olealgo
fuente
No es necesario instalar una versión antigua de G ++; simplemente g++está bien. O mejor, build-essentialtambién incluye algunas bibliotecas.
Peter Cordes
0

En mi raro caso fue color wrapperquien echó a perder gcc. Resuelto al deshabilitar la cwexclusión de su directorio /usr/libexec/cwde PATHla variable de entorno.

usuario3132194
fuente
0

¿Por qué pasó esto? Cuando instala una copia nueva de linux, el compilador gcc viene empaquetado con él. Solo contiene los archivos y binarios que se utilizan para ejecutar Linux (para ahorrar espacio y tiempo, obviamente).

¿Cómo resolver este error? Todo lo que necesita es actualizar sus paquetes a través del administrador de paquetes y reinstalar los paquetes esenciales de compilación. Los comandos pueden ser diferentes en diferentes núcleos.

yoismak
fuente