Błąd Gcc: gcc: błąd podczas próby wykonania „cc1”: execvp: nie ma takiego pliku lub katalogu


102

Z powodzeniem używam gcc na Linux Mint 12. Teraz pojawia się błąd. Niedawno robiłem kompilacje .so i instalowałem Clang nie tak dawno, ale pomyślnie kompilowałem od czasu obu tych wydarzeń, więc nie jestem pewien, co się zmieniło. Użyłem Menedżera oprogramowania GUI, aby usunąć, a następnie ponownie zainstalować gcc, ale wyniki są takie same:

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

Odpowiedzi:


70

Wyjaśnienie

Komunikat o błędzie powiedział nam, że cc1nie znaleziono zależności czasu budowania (w tym przypadku jest ), więc wszystko czego potrzebujemy - zainstaluj odpowiedni pakiet w systemie (używając menedżera pakietów // ze źródeł // w inny sposób)

Co to jest cc1:

cc1to wewnętrzne polecenie, które pobiera wstępnie przetworzone pliki języka C i konwertuje je na assembler. Jest to właściwa część, która kompiluje C. Dla C ++ jest cc1plus i inne wewnętrzne polecenia dla różnych języków.

zaczerpnięte z tej odpowiedzi przez Alana Shutko .

Rozwiązanie dla: Ubuntu / Linux Mint

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

Rozwiązanie dla: środowiska Docker-alpine

Jeśli pracujesz w środowisku docker-alpine, zainstaluj pakiet build-base , dodając do Dockerfile:

RUN apk add build-base

Lepszą nazwę pakietu podał Pablo Castellano . Więcej szczegółów tutaj .

Jeśli potrzebujesz więcej pakietów do celów budowania, rozważ dodanie pakietu alpine-sdk :

RUN apk add alpine-sdk

Zaczerpnięte z github

Rozwiązanie dla: CentOS / Fedora

Ta odpowiedź zawiera instrukcje dla CentOS i Fedora Linux

Rozwiązanie dla: Amazon Linux

sudo yum install gcc72-c++

Zrobione z tego komentarza przez CoderChris

Możesz także spróbować zainstalować pominięte zależności w ten sposób ( chociaż mówi się, że nie rozwiązuje to problemu ):

sudo yum install gcc-c++.noarch

Zaczerpnięte z tej odpowiedzi



63

Na Debianie / Ubuntu naprawiłem ten problem poprzez ponowną instalację build-essential:

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

1
W dzienniku "- reinstalacja build-essential" moje ubuntu konkretnie określiło "Konfigurowanie g ++ (4: 6.1.1-1ubuntu2) ... update-alternatives: używanie / usr / bin / g ++ do udostępnienia / usr / bin / c ++ (c ++) w trybie automatycznym ”
Paamand,

To naprawiło mnie na droplet Debian DigitalOcean.com. Musiałem jednak tylko uruchomić drugie polecenie, a potem gcc skompilowane idealnie przez plik .cpp.
raddevus,

1
@mchid Nic złego - to rozwiązało problem. Chciałem tylko wyjaśnić, która część Twojej sugestii jest związana z problemem. Np. Jeśli twoja odpowiedź nie zadziała dla kogoś, może użyć alternatywnej aktualizacji specyficznej dla gcc.
Paamand

26

Dzieje się tak, ponieważ gccwywołuje wiele innych plików wykonywalnych w celu zakończenia przetwarzania danych wejściowych i cc1nie ma ich w dołączonej ścieżce.

Na typ muszli whereis cc1. Jeśli cc1zostanie znaleziony, lepiej idź dalej i utwórz miękki link w katalogu gcc; w przeciwnym razie cc1nie jest instalowany i musisz zainstalować gcc-c ++ za pomocą menedżera pakietów.


2
Dziękuję za odpowiedź. whereis cc1 nic nie zwraca. Mam zainstalowane gcc i gcc-4.4, gcc-4-6, libgcc1 zgodnie z Menedżerem oprogramowania. Po prostu instaluję g ++, ale nadal otrzymuję błąd.
Scooter

2
sprawdzić, czy plik wykonywalny jest obecny w / usr / / libexec / gcc / <architektura> / <kompilator> / <compiler_version> / CC1 inaczej do czasowego użytkowania Przejdź do katalogu / usr / bin lokalny i utworzyć link przezln -s cc cc1
perilbrain

Nie mam katalogu / usr / local / libexec. W katalogu / usr / local nie znaleziono żadnego "gcc".
Scooter

1
GCC znajduje się w / usr / bin i tam również będziesz cc, wykonaj polecenie wymienione w poprzednim komentarzu w tym katalogu.
perilbrain

2
Pliki binarne cc1 / cc1plus NIE powinny znajdować się w $ PATH.
zwolnił

16

Amazon Linux: naprawa problemu z GCC

Ponieważ pojawia się to jako pierwszy wynik w Google, chciałem tylko udokumentować moje doświadczenia z Amazon Linux. Instalacja gcc-c++.noarchrozwiązała problem:

sudo yum install gcc-c++.noarch

Niektóre osoby również zgłosiły tę alternatywę jako rozwiązanie:

sudo yum install gcc72-c++


2
Zdecydowanie mój problem na amazon linux, ale niestety .noarchjest już zainstalowany.
ragerdl

10
sudo yum install gcc72-c ++ posortowało to dla mnie na Amazon Linux
CoderChris

Cieszę się, że ktoś mówi o Amazon Linux, ale żadne z tych rozwiązań nie zadziałało dla mnie ...
John Chryzostom

1
Na "Amazon Linux AMI 2018.03" yum install gcc72-c ++ jest tym, czego potrzebowałem.
Nick Lothian,

1
sudo yum install gcc72-c ++ działa dla mnie. Wielkie dzięki
Ilyas

13

Dziś napotkałem podobny problem - współpracownik nie mógł zbudować swojego oprogramowania, ale mogłem je zbudować. Kiedy biegł, gccnie mógł znaleźćcc1 .

Jego wykonywalna ścieżka wyglądała rozsądnie, ale fakt, że nie mogłem łatwo odtworzyć awarii, sugerował coś w jego otoczeniu jako przyczynę.

W końcu znaleźliśmy GCC_EXEC_PREFIXw jego środowisku osobę odpowiedzialną za winowajcę i wprowadzającą gccw błąd podczas poszukiwań cc1. Było to częścią jego skryptów startowych powłoki i miało na celu obejście ograniczenia systemu SPARC / Solaris, który nie jest już używany. Problem został rozwiązany, nie ustawiając tej zmiennej środowiskowej.

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


Dokładnie ten sam problem… wciąż nierozwiązany! Stało się to po przeniesieniu projektu z 16.04LTS na 18.04LTS.
Shaze

11

Naprawiłem ten problem, jawnie instalując g ++:

sudo apt-get install g++

Wystąpił problem w systemie Ubuntu 12.04 podczas instalowania pand. (Dzięki perilbrain.)


5

yum install gcc-c++ naprawił.


1
duplikat istniejącej odpowiedzi (obecnie najwyższa głosowana, opublikowana rok przed tą). Odpowiedzi „Dziękuję” lub „Ja też” to po prostu bałagan.
Peter Cordes

4

Upewnij się, że GCC_EXEC_PREFIX(env)nie jest eksportowany, a PATHjest eksportowany do odpowiedniego łańcucha narzędzi.


2

Doświadczyłem tego wkrótce po skompilowaniu i zainstalowaniu nowego, błyszczącego GCC - wersja 8.1 - na RHEL 7. Ostatecznie skończyło się na problemie z uprawnieniami; mój główny umask był winowajcą. W końcu znalazłem cc1ukrywanie się w /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

Jednak uprawnienia do prowadzących tam katalogów nie pozwoliły na moje standardowe konto użytkownika:

[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

Szybkie rekurencyjne chmoddodawanie światowych uprawnień do odczytu / wykonywania naprawiło to:

[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

A teraz gccmogę znaleźć, cc1kiedy poproszę go o skompilowanie czegoś!


1

Może to być również wyświetlany komunikat o błędzie, jeśli próbujesz uruchomić 32-bitowe pliki binarne gcc w 64-bitowym systemie operacyjnym i brakuje 32-bitowej biblioteki glibc. Zgodnie z tym plikiem Readme : „W przypadku systemu 64-bitowego do uruchomienia narzędzi wymagane są 32-bitowe biblioteki libc i libncurses”. W tym przypadku nie ma problemu ze ścieżką, a cc1 jest faktycznie znalezione, ale zgłoszone jako brakujące jako brak 32-bitowego glibc.


1

Pomogło mi użycie llvm-gcczamiast tego:

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

1

Tylko po to, aby udokumentować mój problem z tym problemem, chociaż wydaje się, że jest to konkretny przykład innych odpowiedzi; jako względny nowicjusz czuję, że może to pomóc innym.

Rozwiązanie:

Dodałem '/ usr / bin' na początku PATH dla jednej sesji używając PATH='/usr/path/:$PATH'i wszystko zaczęło działać dobrze.

Użyłem gedit do trwałej aktualizacji PATH, po upewnieniu się, że nie zepsuje moich zwykłych łańcuchów narzędzi.

Wyjaśnienie:

Mam wiele łańcuchów narzędzi zainstalowanych w systemie Ubuntu 14.04LTS i regularnie używam tylko kilku. Kiedy próbowałem użyć gcc z wiersza poleceń, pojawił się problem opisany przez OP. '/ usr / bin' znajduje się w PATH, ale za innymi lokalizacjami toolchain. Okazuje się, że cc1 dla tych innych łańcuchów narzędzi jest niekompatybilne z gcc.


1

Żeby uzupełnić odpowiedź @ maxkoryukov dotyczącą Alpine.

Odpowiednikiem Debiana build-essentialw Alpine jest build-base. W rzeczywistości powyższe alpine-sdkzależy od 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

Możesz to naprawić, uruchamiając to: W Fedorze:

sudo dnf install redhat-rpm-config

0

Wystąpił ten problem podczas całkiem nowej instalacji Fedory 27. Wypróbowałem wszystkie inne sugestie lub ich odpowiedniki; instalowanie różnych pakietów mówiło „już zainstalowane” lub instalowało coś nowego, co nie pomogło.

Naprawiono za pomocą

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

0

W Scientific Linux 6 (podobnie jak CentOS 6-- SL jest teraz zastępowany przez CentOS, AIUI), musiałem użyć tego, /usr/sbin/prelink -av -mRco zostało zasugerowane na https://stelfox.net/blog/2014/08/dependency-prelink-issues/

Dopóki tego nie zrobiłem, pojawiał się błąd cc1, gcc: error trying to exec 'cc1': execvp: No such file or directorykiedy próbowałem kompilować, a gcc --version zgłosił 4.2.2 zamiast 4.4.7, mimo że wersja została zgłoszona przez yum.

Może być powiązany lub nie, ale w systemie zabrakło miejsca na / var


0

Jest w tym pakiecie (Ubuntu 19.04):

  sudo apt install g++-6

Nie musisz instalować starej wersji G ++; po prostu g++jest w porządku. Lub lepiej, build-essentialpobiera też niektóre biblioteki.
Peter Cordes

0

W moim rzadkim przypadku to color wrapperkto zepsuł gcc. Rozwiązany przez wyłączenie cwwykluczenia jego katalogu /usr/libexec/cwze PATHzmiennej środowiskowej.


0

Dlaczego to się dzieje? Kiedy instalujesz nową kopię Linuksa, prepakowany jest kompilator gcc. Zawiera tylko pliki i pliki binarne, które są używane do uruchamiania Linuksa (aby zaoszczędzić miejsce i czas, oczywiście).

Jak rozwiązać ten błąd? Wszystko, czego potrzebujesz, to zaktualizować pakiety za pośrednictwem menedżera pakietów i ponownie zainstalować pakiety niezbędne do kompilacji. Polecenia mogą być różne w różnych jądrach.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.