Gcc hatası: gcc: 'cc1' yürütmeye çalışırken hata: execvp: Böyle bir dosya veya dizin yok


104

Linux Mint 12'de başarıyla gcc kullanıyorum. Şimdi bir hata alıyorum. Son zamanlarda bazı .so derlemeleri yapıyorum ve Clang'ı çok uzun zaman önce kurmadım, ancak bu olayların her ikisinden bu yana başarıyla derledim, bu yüzden neyin değiştiğinden emin değilim. Gcc'yi kaldırmak ve sonra tekrar yüklemek için GUI Yazılım Yöneticisini kullandım, ancak sonuçlar aynı:

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

Yanıtlar:


71

Açıklama

Hata mesajı bize derleme zamanı bağımlılığının (bu durumda var cc1) bulunmadığını, bu yüzden tek ihtiyacımız olduğunu söyledi - uygun paketi sisteme yükleyin (paket yöneticisini // kaynaklardan // başka bir şekilde kullanarak)

Nedir cc1:

cc1önceden işlenmiş C dili dosyalarını alan ve bunları derlemeye dönüştüren dahili komuttur. Bu, C'yi derleyen asıl kısımdır. C ++ için, cc1plus ve farklı diller için diğer dahili komutlar vardır.

Alan Shutko tarafından bu cevaptan alınmıştır .

Çözüm: Ubuntu / Linux Mint

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

Çözüm: Docker-alpine ortamı

Eğer varsa liman işçisi-alpin ortamda yüklemek birikmesi taban adresinden Müşteri bu ekleyerek paketi Dockerfile:

RUN apk add build-base

Pablo Castellano tarafından sağlanan daha iyi paket adı . Daha fazla ayrıntı burada .

İnşaat amacıyla daha fazla pakete ihtiyacınız varsa, alpine-sdk paketini eklemeyi düşünün :

RUN apk add alpine-sdk

Alındığı github

Çözüm: CentOS / Fedora

Bu cevap CentOS ve Fedora Linux için talimatlar içerir

Çözüm: Amazon Linux

sudo yum install gcc72-c++

Alındığı Bu yoruma göre CoderChris

Ayrıca şu şekilde eksik bağımlılıkları kurmayı deneyebilirsiniz ( yine de sorunu çözmediğiniz söylenir ):

sudo yum install gcc-c++.noarch

Alındığı Bu yanıt



64

Debian / ubuntu'da bu sorunu yeniden yükleyerek çözdüm build-essential:

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

1
´ - yeniden derleme temelinin günlüğünde, ubuntu özellikle "g ++ (4: 6.1.1-1ubuntu2) ayarlanıyor ... güncelleme alternatifleri: / usr / bin sağlamak için / usr / bin / g ++ kullanma / c ++ (c ++) otomatik modda "
Paamand

Bu beni Debian DigitalOcean.com damlacığında düzeltti. Sadece gösterilen ikinci komutu çalıştırmak zorunda kaldım ve bundan sonra .cpp dosyası tarafından mükemmel bir şekilde derlenen gcc.
raddevus

1
@mchid Yanlış bir şey yok - Sorunu çözdü. Önerinizin hangi kısmının sorunla ilgili olduğunu açıklığa kavuşturmak istedim. Örneğin, cevabınız birisi için işe yaramadıysa, gcc'ye özel güncelleme alternatifini kullanabilir.
Paamand

26

Bunun nedeni gcc, girişin işlenmesini tamamlamak için diğer birçok yürütülebilir dosyayı çağırması vecc1 ve dahil edilen yolda olmamasıdır.

Kabuk tipinde whereis cc1. Eğer cc1bulunursa, o daha iyi devam edin ve bir dizinde bir sembolik bağ oluşturmak var gcc; aksi takdirde, cc1kurulu değildir ve paket yöneticisini kullanarak gcc-c ++ yüklemeniz gerekir .


2
Cevap için teşekkürler. whereis cc1 hiçbir şey döndürmez. Yazılım Yöneticisine göre gcc ve gcc-4.4, gcc-4-6, libgcc1 yükledim. Sadece g ++ yükledim ama hala hatayı alıyorum.
Scooter

2
yürütülebilir dosyanın / usr / local / libexec / gcc / <architecture> / <compiler> / <compiler_version> / cc1 içinde olup olmadığına bakın, aksi takdirde geçici kullanım için / usr / bin adresine gidin veln -s cc cc1
perilbrain

/ Usr / local / libexec dizinim yok. / Usr / local altında "gcc" bulunmaz.
Scooter

1
GCC / usr / bin altındadır ve orada siz de cc yapacaksınız, bu dizinde önceki yorumda belirtilen komutu çalıştıracaksınız.
perilbrain

2
Cc1 / cc1plus ikili dosyalarının $ PATH içinde olmaması gerekir.
zwol

16

Amazon Linux: GCC sorununu düzeltme

Bu Google'da ilk sonuç olarak ortaya çıktığından, sadece Amazon Linux ile ilgili deneyimimi belgelemek istedim. Yükleme gcc-c++.noarchsorunu çözdü:

sudo yum install gcc-c++.noarch

Bazı insanlar da bu alternatifi bir çözüm olarak bildirdi:

sudo yum install gcc72-c++


2
Kesinlikle benim sorunum amazon linux, ama ne yazık ki .noarchzaten kurulu.
ragerdl

10
sudo yum install gcc72-c ++ benim için Amazon Linux'ta
sıraladı

Birinin Amazon Linux hakkında konuşmasına sevindim, ancak bu çözümlerin hiçbiri benim için işe yaramadı ...
John Chrysostom

1
"Amazon Linux AMI 2018.03" üzerinde yum yüklemek gcc72-c ++ da ihtiyacım olan şeydi.
Nick Lothian

1
sudo yum install gcc72-c ++ benim için çalışıyor. Çok teşekkürler
Ilyas

13

Bugün benzer bir sorunla karşılaştım - bir iş arkadaşım yazılımını oluşturamadı ama ben onu yapabilirdim. Koştuğunda gccbulamadı cc1.

Uygulanabilir yolu makul görünüyordu, ancak başarısızlığı kolayca kopyalayamadığım gerçeği, neden olarak onun ortamında bir şey önerdi.

Sonunda GCC_EXEC_PREFIXsuçlu olan ve gccarayışında yanıltıcı olan çevresinde tanımlanmış bulduk .cc1 . Bu, kabuk başlangıç ​​komut dosyalarının bir parçasıydı ve artık kullanılmayan bir SPARC / Solaris sistemindeki bir sınırlamayı aşmaktı. Bu ortam değişkeni ayarlanmayarak sorun çözüldü.

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


Tam olarak aynı sorun .. hala çözülmedi! Bu, projeyi 16.04LTS'den 18.04LTS'ye taşıdıktan sonra gerçekleşti.
Shaze

11

Bu sorunu açıkça g ++ yükleyerek çözdüm:

sudo apt-get install g++

Pandalar yüklenirken Ubuntu 12.04'te bir sorunla karşılaşıldı. (Teşekkürler perilbrain.)


5

yum install gcc-c++ düzeltmeyi yaptı.


1
mevcut bir cevabın kopyası (şu anda en yüksek oyu alan cevap, bundan bir yıl önce yayınlanan). "Teşekkürler" veya "ben de" yanıtları dağınıktır.
Peter Cordes

4

Ürününüzün GCC_EXEC_PREFIX(env)dışa aktarılmadığından ve PATHdoğru takım zincirine aktarıldığından emin olun .


2

Bunu RHEL 7 üzerinde yepyeni bir GCC - sürüm 8.1 - derleyip kurduktan hemen sonra yaşadım. Sonunda, bir izin sorunu haline geldi; suçlu benim kök umask'ımdı. Sonunda cc1saklanırken buldum /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

Ancak, oraya giden dizinlerdeki izinler standart kullanıcı hesabıma izin vermedi:

[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

chmodDünya okuma / yürütme izinlerini eklemek için hızlı bir özyinelemeli, hemen düzeltildi:

[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

Ve şimdi gccbulabilirsiniz cc1ben derleme bir şeye sorduğunuzda!


1

Bu, 64 bitlik bir işletim sisteminde 32 bit gcc ikili dosyaları çalıştırmaya çalışırsanız ve 32 bit glibc eksikse görüntülenen hata mesajı da olabilir. Bu benioku dosyasına göre : "64 bit sistem için, araçları çalıştırmak için 32 bit libc ve libncurses gerekir." Bu durumda, yolla ilgili bir sorun yoktur ve aslında cc1 bulunur, ancak 32 bit glibc yok olarak eksik olarak rapor edilir .


1

Bana yardımcı olan şey llvm-gccbunun yerine kullanmaktı :

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

1

Diğer cevapların belirli bir örneği gibi görünse de, bu konuyla ilgili sorunumu belgelemek için; Göreceli bir acemi olarak bunun başkalarına yardım edebileceğini düşünüyorum.

Çözüm:

Tek bir oturum için PATH'ın başına '/ usr / bin' ekledim PATH='/usr/path/:$PATH've her şey yolunda gitmeye başladı.

Normal alet zincirlerimi bozmayacağından emin olduktan sonra PATH'yi kalıcı olarak güncellemek için gedit kullandım.

Açıklama:

Ubuntu 14.04LTS'de kurulu birden fazla alet zincirim var ve düzenli olarak sadece birkaç tane kullanıyorum. Gcc'yi komut satırından kullanmaya çalıştığımda sorunu OP tarafından açıklandı. '/ usr / bin' YOL'da, ancak diğer araç zinciri konumlarının arkasında. Diğer araç zincirleri için cc1'in gcc ile uyumsuz olduğu ortaya çıktı.


1

@ Maxkoryukov'un Alpine ile ilgili cevabını tamamlamak için.

Debian'ın build-essentialAlpine'deki karşılığı build-base. Aslında yukarıda belirtilenlere alpine-sdkbağlıdır 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

Bunu çalıştırarak düzeltebilirsiniz: Fedora'da:

sudo dnf install redhat-rpm-config

0

Bu sorunu oldukça yeni bir Fedora 27 yüklemesinde yaşadım. Diğer tüm önerileri veya eşdeğerlerini denedim; çeşitli paketlerin yüklenmesi ya "zaten kurulmuş" dedi ya da yardımcı olmayan yeni bir şey yükledi.

İle düzeltildi

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

0

Scientific Linux 6'da (CentOS 6 - SL'ye benzer şekilde artık CentOS, AIUI ile değiştirilmiştir), https://stelfox.net/blog/2014/08/dependency-prelink-issues/ adresinde/usr/sbin/prelink -av -mR önerilen bulduğum şeyi kullanmak zorunda kaldım.

Bunu yapana kadar, gcc: error trying to exec 'cc1': execvp: No such file or directoryderlemeye çalıştığımda bir cc1 hatası aldım ve gcc --version, yum tarafından rapor edilmesine rağmen 4.4.7 yerine 4.2.2 bildirdi.

İlişkili olabilir veya olmayabilir, ancak sistem / var üzerinde alan kalmamış


0

Bu pakette (Ubuntu 19.04):

  sudo apt install g++-6

Eski bir G ++ sürümünü yüklemenize gerek yoktur; sadece g++iyi. Ya da daha iyisi, build-essentialbirkaç kitap da çeker.
Peter Cordes

0

Benim nadir durumumda color wrapperşımarık olan oydu gcc. Devre dışı bırakarak çözüldü cwonun dizini hariç /usr/libexec/cwdan PATHçevresel değişken.


0

Bu neden oluyor? Yeni bir linux kopyası kurduğunuzda, gcc derleyicisi önceden paketlenmiş olarak gelir. Yalnızca linux'u çalıştırmak için kullanılan dosyaları ve ikili dosyaları içerir (tabii ki yer ve zamandan tasarruf etmek için).

Bu hata nasıl çözülür? İhtiyacınız olan tek şey, paket yöneticisi aracılığıyla paketlerinizi güncellemek ve temel oluşturma paketleri yeniden yüklemektir. Komutlar, farklı çekirdeklerde farklı olabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.