Gcc-Fehler: gcc: Fehler beim Ausführen von 'cc1': execvp: Keine solche Datei oder kein solches Verzeichnis


101

Ich habe gcc unter Linux Mint 12 erfolgreich verwendet. Jetzt wird eine Fehlermeldung angezeigt. Ich habe vor kurzem einige .so-Builds durchgeführt und Clang vor nicht allzu langer Zeit installiert, aber seit diesen beiden Ereignissen erfolgreich kompiliert, also nicht sicher, was sich geändert hat. Ich habe den GUI-Software-Manager verwendet, um gcc zu entfernen und dann erneut zu installieren, aber die Ergebnisse sind dieselben:

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

Antworten:


68

Erläuterung

Die Fehlermeldung teilte uns mit, dass die Build-Time-Abhängigkeit (in diesem Fall cc1) nicht gefunden wurde. Alles, was wir brauchen, ist die Installation des entsprechenden Pakets auf dem System (mithilfe des Paketmanagers // aus Quellen // auf andere Weise).

Was ist cc1:

cc1ist der interne Befehl, der vorverarbeitete C-Sprachdateien in Assembly konvertiert. Es ist der eigentliche Teil, der C kompiliert. Für C ++ gibt es cc1plus und andere interne Befehle für verschiedene Sprachen.

entnommen aus dieser Antwort von Alan Shutko .

Lösung für: Ubuntu / Linux Mint

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

Lösung für: Docker-alpine Umgebung

Wenn Sie sich in einer Docker-Alpine- Umgebung befinden, installieren Sie das Build-Base- Paket, indem Sie Folgendes zu Ihrem Dockerfile:

RUN apk add build-base

Besserer Paketname von Pablo Castellano . Weitere Details hier .

Wenn Sie weitere Pakete für Bauzwecke benötigen, sollten Sie das Paket alpine-sdk hinzufügen :

RUN apk add alpine-sdk

Entnommen aus Github

Lösung für: CentOS / Fedora

Diese Antwort enthält Anweisungen für CentOS und Fedora Linux

Lösung für: Amazon Linux

sudo yum install gcc72-c++

Entnommen aus diesem Kommentar von CoderChris

Sie können auch versuchen, fehlende Abhängigkeiten auf diese Weise zu installieren ( es wird jedoch gesagt, dass das Problem dadurch nicht gelöst werden soll ):

sudo yum install gcc-c++.noarch

Aus dieser Antwort entnommen



63

Auf debian / ubuntu habe ich dieses Problem durch Neuinstallation behoben build-essential:

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

1
Im Protokoll für die "Neuinstallation von Build-Essential" gab mein Ubuntu ausdrücklich "Einrichten von g ++ (4: 6.1.1-1ubuntu2) ... Update-Alternativen: Verwenden von / usr / bin / g ++, um / usr / bin bereitzustellen / c ++ (c ++) im Auto-Modus "
Paamand

Dies hat mich auf Debian DigitalOcean.com Droplet behoben. Ich musste nur den zweiten angezeigten Befehl ausführen und danach gcc perfekt von der .cpp-Datei kompiliert.
Raddevus

1
@mchid Nichts falsch - Es hat das Problem behoben. Ich wollte nur klarstellen, welcher Teil Ihres Vorschlags sich auf das Problem bezieht. Wenn Ihre Antwort beispielsweise für jemanden nicht funktioniert hat, kann er die für gcc spezifische Update-Alternative verwenden.
Paamand

26

Dies liegt daran, gccdass viele andere ausführbare Dateien aufgerufen werden, um die Verarbeitung der Eingabe abzuschließen, und cc1sich nicht im enthaltenen Pfad befindet.

Auf Shell-Typ whereis cc1. Wenn cc1es gefunden wird, ist es besser, einen Softlink im Verzeichnis von zu erstellen gcc. Andernfalls cc1wird nicht installiert und Sie müssen gcc-c ++ mit dem Paketmanager installieren .


2
Danke für die Antwort. Dabei gibt cc1 nichts zurück. Ich habe gcc und gcc-4.4, gcc-4-6, libgcc1 laut Software Manager installiert. Ich installiere nur g ++, erhalte aber immer noch den Fehler.
Roller

2
Überprüfen Sie, ob die ausführbare Datei in / usr / local / libexec / gcc / <Architektur> / <Compiler> / <Compiler_Version> / cc1 vorhanden ist. Andernfalls navigieren Sie zur vorübergehenden Verwendung zu / usr / bin und erstellen Sie einen Link vonln -s cc cc1
perilbrain

Ich habe kein Verzeichnis / usr / local / libexec. Unter / usr / local wurde kein "gcc" gefunden.
Roller

1
GCC befindet sich unter / usr / bin und dort führen Sie auch den im vorherigen Kommentar genannten Befehl in diesem Verzeichnis aus.
Perilbrain

2
Die Binärdateien cc1 / cc1plus dürfen NICHT in $ PATH enthalten sein.
zwol

16

Amazon Linux: Behebung des GCC-Problems

Da dies das erste Ergebnis bei Google ist, wollte ich nur meine Erfahrungen mit Amazon Linux dokumentieren. Die Installation hat gcc-c++.noarchdas Problem behoben:

sudo yum install gcc-c++.noarch

Einige Leute berichteten auch über diese Alternative als Lösung:

sudo yum install gcc72-c++


2
Auf jeden Fall ist mein Problem unter Amazon Linux, aber leider .noarchbereits installiert.
Ragerdl

10
sudo yum install gcc72-c ++ sortierte es für mich unter Amazon Linux
CoderChris

Ich bin froh, dass jemand über Amazon Linux spricht, aber keine dieser Lösungen hat für mich funktioniert ...
John Chrysostom

1
Auf "Amazon Linux AMI 2018.03" brauchte ich auch gcc72-c ++, um es zu installieren.
Nick Lothian

1
sudo yum install gcc72-c ++ funktioniert bei mir. Vielen Dank
Ilyas

13

Ich bin heute auf ein ähnliches Problem gestoßen - ein Mitarbeiter konnte seine Software nicht erstellen, aber ich konnte sie erstellen. Als er rannte gcckonnte es nicht finden cc1.

Sein ausführbarer Pfad sah vernünftig aus, aber die Tatsache, dass ich den Fehler nicht einfach wiederholen konnte, deutete auf etwas in seiner Umgebung als Ursache hin.

Schließlich fanden wir GCC_EXEC_PREFIXin seiner Umgebung definiert, was der Schuldige war und gccbei der Suche nach irreführend war cc1. Dies war Teil seiner Shell-Startskripte und sollte eine Einschränkung eines SPARC / Solaris-Systems umgehen, das nicht mehr verwendet wird. Das Problem wurde behoben, indem diese Umgebungsvariable nicht festgelegt wurde.

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


Genau das gleiche Problem .. noch ungelöst! Dies geschah nach der Portierung des Projekts von 16.04LTS auf 18.04LTS.
Shaze

11

Ich habe dieses Problem durch explizite Installation von g ++ behoben:

sudo apt-get install g++

Bei Ubuntu 12.04 ist bei der Installation von Pandas ein Problem aufgetreten. (Danke Perilbrain.)


5

yum install gcc-c++ habe das Problem behoben.


1
Duplikat einer vorhandenen Antwort (derzeit die am höchsten gewählte, ein Jahr vor dieser Antwort). "Danke" oder "Ich auch" Antworten sind nur Unordnung.
Peter Cordes

4

Stellen Sie sicher, dass Ihre GCC_EXEC_PREFIX(env)nicht exportiert und PATHin die richtige Werkzeugkette exportiert wird.


2

Ich habe dies kurz nach dem Kompilieren und Installieren eines glänzenden neuen GCC - Version 8.1 - auf RHEL 7 erlebt. Am Ende war es ein Berechtigungsproblem. Meine Wurzel umask war der Schuldige. Ich fand schließlich cc1versteckt in /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

Die Berechtigungen für die dort führenden Verzeichnisse erlaubten jedoch nicht mein Standardbenutzerkonto:

[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

Eine schnelle Rekursion chmodzum Hinzufügen von Weltlese- / Ausführungsberechtigungen hat das Problem behoben:

[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

Und jetzt gcckann cc1ich finden, wenn ich darum bitte, etwas zu kompilieren!


1

Dies kann auch die angezeigte Fehlermeldung sein, wenn Sie versuchen, 32-Bit-GCC-Binärdateien auf einem 64-Bit-Betriebssystem auszuführen und 32-Bit-Glibc fehlt. In dieser Readme- Datei heißt es: "Für ein 64-Bit-System sind 32-Bit-libc und libncurses erforderlich, um die Tools auszuführen." In diesem Fall gibt es kein Problem mit dem Pfad und cc1 wird tatsächlich gefunden, aber als fehlend gemeldet, da kein 32-Bit-glibc vorhanden ist.


1

Was mir geholfen hat, war llvm-gccstattdessen zu verwenden :

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

1

Nur um meine Probleme mit diesem Problem zu dokumentieren, obwohl es nur ein konkretes Beispiel für andere Antworten zu sein scheint; Als relativer Neuling habe ich das Gefühl, dass dies anderen helfen könnte.

Lösung:

Ich habe '/ usr / bin' am Anfang von PATH für eine einzelne Sitzung mit hinzugefügt PATH='/usr/path/:$PATH'und alles begann gut zu funktionieren.

Ich habe gedit verwendet, um den PATH dauerhaft zu aktualisieren, nachdem ich sichergestellt hatte, dass meine regulären Toolchains nicht beschädigt werden.

Erläuterung:

Ich habe mehrere Toolchains unter Ubuntu 14.04LTS installiert und benutze regelmäßig nur ein paar. Als ich versuchte, gcc über die Befehlszeile zu verwenden, wurde das Problem vom OP beschrieben. '/ usr / bin' befindet sich im PFAD, aber hinter den anderen Positionen der Toolchain. Es stellt sich heraus, dass cc1 für diese anderen Toolchains nicht mit gcc kompatibel ist.


1

Nur um @ maxkoryukovs Antwort bezüglich Alpine zu ergänzen.

Das Äquivalent zu Debian build-essentialin Alpine ist build-base. In der Tat alpine-sdkhängt das oben erwähnte davon ab 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

Sie können dies beheben, indem Sie Folgendes ausführen: Auf Fedora:

sudo dnf install redhat-rpm-config

0

Ich habe dieses Problem bei einer relativ neuen Installation von Fedora 27 festgestellt. Ich habe alle anderen Vorschläge oder deren Entsprechungen ausprobiert. Die Installation der verschiedenen Pakete sagte entweder "bereits installiert" oder installierte etwas Neues, was nicht half.

Behoben mit

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

0

Unter Scientific Linux 6 (ähnlich wie CentOS 6 - SL wird jetzt durch CentOS, AIUI ersetzt) ​​musste ich das verwenden, /usr/sbin/prelink -av -mRwas ich unter https://stelfox.net/blog/2014/08/dependency-prelink-issues/ vorgeschlagen fand.

Bis ich das tat, bekam ich einen cc1-Fehler, gcc: error trying to exec 'cc1': execvp: No such file or directoryals ich versuchte zu kompilieren, und gcc --version meldete 4.2.2 anstelle von 4.4.7, obwohl diese Version von yum gemeldet wurde.

Es kann verwandt sein oder nicht, aber dem System ist auf / var der Speicherplatz ausgegangen


0

Es ist in diesem Paket (Ubuntu 19.04):

  sudo apt install g++-6

Sie müssen keine alte G ++ - Version installieren. ist einfach g++in Ordnung. Oder besser, build-essentialzieht auch einige Bibliotheken ein.
Peter Cordes

0

In meinem seltenen Fall war es, color wrapperwer verwöhnte gcc. Gelöst durch Deaktivieren des cwAusschlusses seines Verzeichnisses /usr/libexec/cwvon der PATHUmgebungsvariablen.


0

Warum passiert das? Wenn Sie eine neue Linux-Kopie installieren, ist der gcc-Compiler bereits im Lieferumfang enthalten. Es enthält nur die Dateien und Binärdateien, die zum Ausführen des Linux verwendet werden (natürlich um Platz und Zeit zu sparen).

Wie löse ich diesen Fehler? Sie müssen lediglich Ihre Pakete über den Paketmanager aktualisieren und die Build-Essential-Pakete neu installieren. Die Befehle können auf verschiedenen Kerneln unterschiedlich sein.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.