Kesalahan Gcc: gcc: kesalahan mencoba mengeksekusi 'cc1': execvp: Tidak ada file atau direktori seperti itu

102

Saya telah berhasil menggunakan gcc di Linux Mint 12. Sekarang saya mendapatkan pesan kesalahan. Saya baru-baru ini melakukan beberapa .so membangun dan menginstal Clang belum lama ini, tetapi telah berhasil mengkompilasi sejak kedua peristiwa tersebut, jadi tidak yakin apa yang berubah. Saya menggunakan GUI Software Manager untuk menghapus dan menginstal gcc lagi, tetapi hasilnya sama:

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

Jawaban:

70

Penjelasan

Pesan kesalahan memberi tahu kami, bahwa ketergantungan waktu-build (dalam hal ini adalah cc1) tidak ditemukan, jadi yang kami butuhkan - instal paket yang sesuai ke sistem (menggunakan manajer paket // dari sumber // dengan cara lain)

Apa itu cc1:

cc1adalah perintah internal yang mengambil file bahasa C yang telah diproses dan mengubahnya menjadi assembly. Ini adalah bagian sebenarnya yang mengkompilasi C. Untuk C ++, ada cc1plus, dan perintah internal lainnya untuk bahasa yang berbeda.

diambil dari jawaban ini oleh Alan Shutko .

Solusi untuk: Ubuntu / Linux Mint

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

Solusi untuk: Lingkungan Docker-alpine

Jika Anda berada di lingkungan docker-alpine, instal paket build-base dengan menambahkan ini ke Dockerfile:

RUN apk add build-base

Nama paket yang lebih baik disediakan oleh Pablo Castellano . Lebih lengkapnya di sini .

Jika Anda membutuhkan lebih banyak paket untuk tujuan pembangunan, pertimbangkan untuk menambahkan paket alpine-sdk :

RUN apk add alpine-sdk

Diambil dari github

Solusi untuk: CentOS / Fedora

Jawaban ini berisi instruksi untuk CentOS dan Fedora Linux

Solusi untuk: Amazon Linux

sudo yum install gcc72-c++

Diambil dari komentar ini oleh CoderChris

Anda juga dapat mencoba menginstal dependensi yang terlewat oleh ini ( meskipun, dikatakan tidak menyelesaikan masalah ):

sudo yum install gcc-c++.noarch

Diambil dari jawaban ini

maxkoryukov.dll
sumber
64

Di CentOS atau Fedora

yum install gcc-c++ 
Antony Hatchkins
sumber
63

Di debian / ubuntu saya memperbaiki masalah ini dengan menginstal ulang build-essential:

sudo apt-get update
sudo apt-get install --reinstall build-essential
mchid
sumber
1
Di log untuk ´ - instal ulang build-essential´ ubuntu saya secara khusus menyatakan "Menyiapkan g ++ (4: 6.1.1-1ubuntu2) ... update-alternatif: menggunakan / usr / bin / g ++ untuk menyediakan / usr / bin / c ++ (c ++) dalam mode otomatis "
Paamand
Ini memperbaiki saya di droplet Debian DigitalOcean.com. Saya hanya perlu menjalankan perintah kedua yang ditunjukkan dan setelah itu gcc dikompilasi oleh file .cpp dengan sempurna.
raddevus
1
@ mchid Tidak ada yang salah - Ini memperbaiki masalah. Hanya ingin mengklarifikasi bagian mana dari saran Anda yang terkait dengan masalah tersebut. Misalnya, jika jawaban Anda tidak berhasil untuk seseorang, mereka dapat menggunakan alternatif-pembaruan khusus untuk gcc.
Paamand
26

Ini karena gccmemanggil banyak file yang dapat dieksekusi lainnya untuk menyelesaikan pemrosesan input, dan cc1tidak ada dalam jalur yang disertakan.

Pada tipe shell whereis cc1. Jika cc1ditemukan, lebih baik lanjutkan dan buat softlink di direktori gcc; jika tidak, cc1tidak diinstal dan Anda harus menginstal gcc-c ++ menggunakan pengelola paket.

berbahaya
sumber
2
Terima kasih balasannya. dimana cc1 tidak mengembalikan apa-apa. Saya telah menginstal gcc dan gcc-4.4, gcc-4-6, libgcc1 sesuai dengan Software Manager. Saya baru saja menginstal g ++, tetapi saya masih mendapatkan kesalahan.
Scooter
2
lihat apakah executable ada di / usr / local / libexec / gcc / <architecture> / <compiler> / <compiler_version> / cc1 jika tidak untuk penggunaan sementara navigasikan ke / usr / bin dan buat tautan olehln -s cc cc1
perilbrain
Saya tidak memiliki direktori / usr / local / libexec. Tidak ada "gcc" yang ditemukan di / usr / local.
Scooter
1
GCC ada di bawah / usr / bin dan di sana Anda juga akan meng-cc, jalankan perintah yang disebutkan dalam komentar sebelumnya di direktori ini.
perilbrain
2
Binari cc1 / cc1plus TIDAK seharusnya dalam $ PATH.
zwol
16

Amazon Linux: memperbaiki masalah GCC

Karena ini muncul sebagai hasil pertama di Google, saya hanya ingin mendokumentasikan pengalaman saya dengan Amazon Linux. Memasang gcc-c++.noarchmemperbaiki masalah:

sudo yum install gcc-c++.noarch

Beberapa orang juga melaporkan alternatif ini sebagai solusi:

sudo yum install gcc72-c++

Renato Byrro
sumber
2
Pasti masalah saya di amazon linux, tapi sayang, .noarchsudah terinstal.
ragerdl
10
sudo yum install gcc72-c ++ menyortirnya untuk saya di Amazon Linux
CoderChris
Senang seseorang berbicara tentang Amazon Linux, tetapi tidak satu pun dari solusi ini yang berhasil untuk saya ...
John Chrysostom
1
Di "Amazon Linux AMI 2018.03", saya juga perlu menginstal gcc72-c ++.
Nick Lothian
1
sudo yum install gcc72-c ++ berfungsi untuk saya. Terima kasih banyak
Ilyas
13

Saya mengalami masalah serupa hari ini - rekan kerja tidak dapat membuat perangkat lunaknya tetapi saya dapat membuatnya. Ketika dia berlari gcctidak dapat menemukannya cc1.

Jalannya yang dapat dieksekusi tampak masuk akal tetapi fakta bahwa saya tidak dapat dengan mudah meniru kegagalan tersebut menunjukkan sesuatu di lingkungannya sebagai penyebabnya.

Akhirnya kami menemukan GCC_EXEC_PREFIXdefinisi di lingkungannya yang merupakan pelakunya dan menyesatkan gccdalam pencarian cc1. Ini adalah bagian dari skrip startup shell-nya dan dimaksudkan untuk mengatasi batasan pada sistem SPARC / Solaris yang tidak lagi digunakan. Masalah diatasi dengan tidak menyetel variabel lingkungan ini.

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

Deaks
sumber
Masalah yang sama persis .. masih belum terselesaikan! Ini terjadi setelah memindahkan proyek dari 16.04LTS ke 18.04LTS.
Shaze
11

Saya memperbaiki masalah ini dengan menginstal g ++ secara eksplisit:

sudo apt-get install g++

Masalah ditemukan di Ubuntu 12.04 saat menginstal panda. (Terima kasih perilbrain.)

Mark Chackerian
sumber
5

yum install gcc-c++ melakukan perbaikan.

Suresh Ganta
sumber
1
duplikat dari jawaban yang ada (saat ini yang paling banyak dipilih, diposting setahun sebelum yang ini). Jawaban "Terima kasih" atau "saya juga" hanya berantakan.
Peter Cordes
4

Pastikan Anda GCC_EXEC_PREFIX(env)tidak diekspor dan Anda PATHdiekspor ke rantai alat yang benar.

Vijay Nag
sumber
2

Saya mengalami ini segera setelah mengkompilasi dan menginstal GCC baru yang mengkilap - versi 8.1 - di RHEL 7. Pada akhirnya, ini berakhir menjadi masalah perizinan; akar umask saya adalah pelakunya. Saya akhirnya menemukan cc1persembunyian di /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

Namun, izin pada direktori yang mengarah ke sana tidak mengizinkan akun pengguna standar saya:

[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

Rekursif cepat chmoduntuk menambahkan izin baca / eksekusi dunia memperbaikinya:

[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

Dan sekarang gccdapat menemukan cc1ketika saya memintanya untuk mengkompilasi sesuatu!

jefe2000.dll
sumber
1

Ini mungkin juga merupakan pesan kesalahan yang ditampilkan jika Anda mencoba menjalankan biner gcc 32-bit pada OS 64-bit dan kehilangan glibc 32-bit. Menurut readme ini : "Untuk sistem 64 bit, 32 bit libc dan libncurses diperlukan untuk menjalankan alat.". Dalam hal ini tidak ada masalah dengan jalur dan cc1 sebenarnya ditemukan, tetapi dilaporkan hilang sebagai tidak ada glibc 32 bit.

jujur
sumber
1

Yang membantu saya adalah menggunakan llvm-gcc:

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

Hanya untuk mendokumentasikan masalah saya dengan masalah ini meskipun tampaknya hanya menjadi contoh spesifik dari jawaban lain; sebagai seorang pemula yang relatif, saya merasa ini dapat membantu orang lain.

Larutan:

Saya menambahkan '/ usr / bin' ke awal PATH untuk satu sesi menggunakan PATH='/usr/path/:$PATH'dan semuanya mulai berfungsi dengan baik.

Saya menggunakan gedit untuk memperbarui PATH secara permanen, setelah memastikan itu tidak akan merusak rantai alat biasa saya.

Penjelasan:

Saya memiliki beberapa rantai alat yang diinstal di Ubuntu 14.04LTS dan saya hanya menggunakan beberapa secara teratur. Ketika saya mencoba menggunakan gcc dari baris perintah, saya mendapat masalah yang dijelaskan oleh OP. '/ usr / bin' ada di PATH tetapi berada di belakang lokasi toolchain lainnya. Ternyata cc1 untuk rantai alat lain tersebut tidak kompatibel dengan gcc.

J. Sunderland
sumber
1

Sekadar melengkapi jawaban @ maxkoryukov tentang Alpine.

Setara dengan Debian build-essentialdi Alpine adalah build-base. Faktanya, hal tersebut di atas alpine-sdktergantung 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
sumber
0

Anda dapat memperbaikinya dengan menjalankan ini: Di ​​Fedora:

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

Saya mengalami masalah ini pada penginstalan Fedora 27 yang cukup baru. Saya mencoba semua saran lain atau yang setara; menginstal berbagai paket baik mengatakan "sudah diinstal" atau menginstal sesuatu yang baru yang tidak membantu.

Diperbaiki dengan

# dnf remove gcc
# dnf install gcc gcc-c++
wallyk
sumber
0

Pada Scientific Linux 6 (mirip dengan CentOS 6-- SL sekarang digantikan oleh CentOS, AIUI), saya harus menggunakan /usr/sbin/prelink -av -mRyang saya temukan disarankan di https://stelfox.net/blog/2014/08/dependency-prelink-issues/

Sampai saya melakukan itu, saya mendapat kesalahan cc1 gcc: error trying to exec 'cc1': execvp: No such file or directory ketika saya mencoba mengkompilasi, dan gcc --version melaporkan 4.2.2, bukan 4.4.7, meskipun versi itu dilaporkan oleh yum.

Ini mungkin terkait atau tidak, tetapi sistem telah kehabisan ruang di / var

Russell Jones
sumber
0

Ada dalam paket ini (Ubuntu 19.04):

  sudo apt install g++-6
olealgo.dll
sumber
Anda tidak perlu menginstal versi G ++ lama; hanya g++baik-baik saja. Atau lebih baik, build-essentialmenarik beberapa libs juga.
Peter Cordes
0

Dalam kasus langka saya itu color wrapperyang manja gcc. Dipecahkan dengan menonaktifkan cwtidak termasuk direktori /usr/libexec/cwdari PATHvariabel lingkungan.

pengguna3132194
sumber
0

Mengapa ini terjadi? Saat Anda menginstal salinan baru linux, gcc compiler sudah dikemas sebelumnya. Ini hanya berisi file dan binari yang digunakan untuk menjalankan linux (untuk menghemat ruang dan waktu, tentunya).

Bagaimana cara mengatasi kesalahan ini? Yang Anda butuhkan hanyalah memperbarui paket Anda melalui manajer paket dan menginstal ulang paket penting build. Perintahnya mungkin berbeda pada kernel yang berbeda.

yoismak
sumber