Erro Gcc: gcc: erro ao tentar exec 'cc1': execvp: Não existe tal arquivo ou diretório


102

Tenho usado com sucesso o gcc no Linux Mint 12. Agora estou recebendo um erro. Recentemente, tenho feito alguns builds .so e instalei o Clang há não muito tempo, mas compilei com êxito desde ambos os eventos, portanto, não tenho certeza do que mudou. Usei o GUI Software Manager para remover e instalar o gcc novamente, mas os resultados são os mesmos:

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

Respostas:


68

Explicação

A mensagem de erro nos disse que a dependência em tempo de construção (neste caso, é cc1) não foi encontrada, então tudo o que precisamos - instale o pacote apropriado no sistema (usando o gerenciador de pacotes // de fontes // de outra maneira)

O que é cc1:

cc1é o comando interno que pega arquivos de linguagem C pré-processados ​​e os converte em assembly. É a parte real que compila C. Para C ++, há cc1plus e outros comandos internos para diferentes linguagens.

retirado desta resposta de Alan Shutko .

Solução para: Ubuntu / Linux Mint

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

Solução para: ambiente Docker-alpine

Se você estiver no ambiente docker-alpine , instale o pacote build-base adicionando-o a Dockerfile:

RUN apk add build-base

Melhor nome do pacote fornecido por Pablo Castellano . Mais detalhes aqui .

Se você precisar de mais pacotes para fins de construção, considere adicionar o pacote alpine-sdk :

RUN apk add alpine-sdk

Retirado do github

Solução para: CentOS / Fedora

Esta resposta contém instruções para CentOS e Fedora Linux

Solução para: Amazon Linux

sudo yum install gcc72-c++

Retirado deste comentário por CoderChris

Você também pode tentar instalar dependências perdidas com isso ( embora, diga-se que não resolve o problema ):

sudo yum install gcc-c++.noarch

Retirado desta resposta



63

No debian / ubuntu, resolvi esse problema reinstalando build-essential:

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

1
No log do ´ - reinstalar o build-essential´, meu ubuntu declarou especificamente "Configurando o g ++ (4: 6.1.1-1ubuntu2) ... alternativas de atualização: usando / usr / bin / g ++ para fornecer / usr / bin / c ++ (c ++) em modo automático "
Paamand de

Isso me corrigiu no droplet Debian DigitalOcean.com. Eu só tive que executar o segundo comando mostrado e depois disso gcc compilado pelo arquivo .cpp perfeitamente.
raddevus

1
@mchid Nada de errado - corrigiu o problema. Só queria esclarecer que parte de sua sugestão está relacionada ao problema. Por exemplo, se sua resposta não funcionou para alguém, eles poderiam usar a alternativa de atualização específica para o gcc.
Paamand

26

Isso ocorre porque gccchama muitos outros executáveis ​​para concluir o processamento da entrada e cc1não está no caminho incluído.

No tipo de concha whereis cc1. Se cc1for encontrado, é melhor ir em frente e criar um softlink no diretório de gcc; caso contrário, cc1não está instalado e você deve instalar o gcc-c ++ usando o gerenciador de pacotes.


2
Obrigado pela resposta. whereis cc1 não retorna nada. Tenho gcc e gcc-4.4, gcc-4-6, libgcc1 instalados de acordo com o Gerenciador de software. Acabei de instalar o g ++, mas continuo recebendo o erro.
Scooter

2
veja se o executável está presente em / usr / local / libexec / gcc / <architecture> / <compiler> / <compiler_version> / cc1, caso contrário, para uso temporário, navegue até / usr / bin e crie o link porln -s cc cc1
perilbrain

Não tenho um diretório / usr / local / libexec. Não há "gcc" em / usr / local.
Scooter

1
O GCC está em / usr / bin e lá você também irá cc, executar o comando mencionado no comentário anterior neste diretório.
perilbrain

2
Os binários cc1 / cc1plus NÃO devem estar em $ PATH.
zwol

16

Amazon Linux: corrigindo o problema do GCC

Como esse é o primeiro resultado no Google, eu só queria documentar minha experiência com o Amazon Linux. A instalação gcc-c++.noarchcorrigiu o problema:

sudo yum install gcc-c++.noarch

Algumas pessoas também relataram esta alternativa como solução:

sudo yum install gcc72-c++


2
Definitivamente meu problema no Amazon Linux, mas, infelizmente, .noarchjá está instalado.
ragerdl

10
sudo yum install gcc72-c ++ classificou para mim no Amazon Linux
CoderChris

Que bom que alguém está falando sobre Amazon Linux, mas nenhuma dessas soluções funcionou para mim ...
John Chrysostom

1
No "Amazon Linux AMI 2018.03" yum install gcc72-c ++ era o que eu precisava também.
Nick Lothian

1
sudo yum install gcc72-c ++ funciona para mim. Muito obrigado
Ilyas

13

Encontrei um problema semelhante hoje - um colega de trabalho não conseguiu construir seu software, mas eu consegui. Quando ele correu gcc, não conseguiu encontrar cc1.

Seu caminho executável parecia razoável, mas o fato de eu não conseguir replicar facilmente a falha sugeriu algo em seu ambiente como a causa.

Por fim, descobrimos GCC_EXEC_PREFIXdefinido em seu ambiente quem era o culpado e foi enganoso gccna busca cc1. Isso fazia parte de seus scripts de inicialização do shell e tinha como objetivo solucionar uma limitação em um sistema SPARC / Solaris que não está mais em uso. O problema foi resolvido ao não definir esta variável de ambiente.

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


Exatamente o mesmo problema ... ainda não resolvido! Isso ocorreu após portar o projeto de 16.04LTS para 18.04LTS.
Shaze

11

Corrigi esse problema instalando explicitamente o g ++:

sudo apt-get install g++

O problema foi encontrado no Ubuntu 12.04 durante a instalação do pandas. (Obrigado perilbrain.)


5

yum install gcc-c++ fez a correção.


1
duplicata de uma resposta existente (atualmente a mais votada, postada um ano antes desta). Respostas de "obrigado" ou "eu também" são uma desordem.
Peter Cordes

4

Certifique-se de que GCC_EXEC_PREFIX(env)não seja exportado e que PATHseja exportado para a cadeia de ferramentas correta.


2

Eu experimentei isso logo após compilar e instalar um novo GCC - versão 8.1 - no RHEL 7. No final, acabou sendo um problema de permissões; meu umask raiz foi o culpado. Acabei por me cc1esconder em /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

No entanto, as permissões nos diretórios que levam até lá não permitiam minha conta de usuário padrão:

[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

Um recursivo rápido chmodpara adicionar permissões globais de leitura / execução corrigiu o problema:

[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

E agora gccposso encontrar cc1quando eu pedir para compilar algo!


1

Essa também pode ser a mensagem de erro exibida se você tentar executar binários gcc de 32 bits em um sistema operacional de 64 bits e sem glibc de 32 bits. De acordo com este leia - me : "Para sistemas de 64 bits, libc e libncurses de 32 bits são necessários para executar as ferramentas.". Nesse caso, não há nenhum problema com o caminho e cc1 foi realmente encontrado, mas relatado como ausente como sem glibc de 32 bits.


1

O que me ajudou foi usar em llvm-gccvez disso:

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

1

Apenas para documentar meu problema com esse problema, mesmo que pareça ser um exemplo específico de outras respostas; como um novato em relação, sinto que isso pode ajudar outras pessoas.

Solução:

Eu adicionei '/ usr / bin' ao início do PATH para uma única sessão usando PATH='/usr/path/:$PATH'e tudo começou a funcionar bem.

Usei o gedit para atualizar o PATH permanentemente, depois de garantir que não quebraria meu conjunto de ferramentas regular.

Explicação:

Tenho vários conjuntos de ferramentas instalados no Ubuntu 14.04LTS e uso apenas alguns regularmente. Quando tentei usar o gcc na linha de comando, recebi o problema descrito pelo OP. '/ usr / bin' está no PATH, mas está atrás dos outros locais do conjunto de ferramentas. Acontece que o cc1 para aqueles outros conjuntos de ferramentas é incompatível com o gcc.


1

Apenas para complementar a resposta de @maxkoryukov em relação à Alpine.

O equivalente ao Debian build-essentialem Alpine é build-base. Na verdade, o acima mencionado alpine-sdkdepende 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

Você pode corrigir isso executando o seguinte: No Fedora:

sudo dnf install redhat-rpm-config

0

Eu experimentei esse problema em uma instalação razoavelmente nova do Fedora 27. Tentei todas as outras sugestões ou seus equivalentes; instalar os vários pacotes disse "já instalado" ou instalou algo novo que não ajudou.

Corrigido com

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

0

No Scientific Linux 6 (semelhante ao CentOS 6-- SL agora foi substituído pelo CentOS, AIUI), tive que usar o /usr/sbin/prelink -av -mRque achei sugerido em https://stelfox.net/blog/2014/08/dependency-prelink-issues/

Até fazer isso, eu recebia um erro cc1 gcc: error trying to exec 'cc1': execvp: No such file or directoryquando tentei compilar, e gcc --version relatou 4.2.2 em vez de 4.4.7, apesar dessa versão ser relatada pelo yum.

Pode ou não estar relacionado, mas o sistema ficou sem espaço em / var


0

Está neste pacote (Ubuntu 19.04):

  sudo apt install g++-6

Você não precisa instalar uma versão antiga do G ++; apenas g++está bem. Ou melhor, build-essentialpuxa algumas bibliotecas também.
Peter Cordes

0

No meu caso raro, foi color wrapperquem estragou gcc. Resolvido desativando a cwexclusão de seu diretório /usr/libexec/cwda PATHvariável ambiental.


0

Por que isso acontece? Quando você instala uma nova cópia do Linux, o compilador gcc vem pré-embalado com ele. Ele contém apenas os arquivos e binários que são usados ​​para executar o linux (para economizar espaço e tempo, obviamente).

Como resolver esse erro? Tudo que você precisa é atualizar seus pacotes por meio do gerenciador de pacotes e reinstalar os pacotes essenciais para compilar. Os comandos podem ser diferentes em kernels diferentes.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.