ข้อผิดพลาด Gcc: gcc: เกิดข้อผิดพลาดขณะพยายาม exec 'cc1': execvp: ไม่มีไฟล์หรือไดเร็กทอรีดังกล่าว


104

ฉันใช้ gcc บน Linux Mint 12 สำเร็จแล้วตอนนี้ฉันได้รับข้อผิดพลาด เมื่อไม่นานมานี้ฉันได้ทำการสร้างและติดตั้ง Clang เมื่อไม่นานมานี้ แต่ได้รวบรวมสำเร็จแล้วเนื่องจากทั้งสองเหตุการณ์นั้นจึงไม่แน่ใจว่ามีอะไรเปลี่ยนแปลงไปบ้าง ฉันใช้ GUI Software Manager เพื่อลบและติดตั้ง gcc อีกครั้ง แต่ผลลัพธ์เหมือนกัน:

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

คำตอบ:


71

คำอธิบาย

ข้อความแสดงข้อผิดพลาดบอกเราว่าcc1ไม่พบการพึ่งพาเวลาสร้าง (ในกรณีนี้คือ) ดังนั้นสิ่งที่เราต้องการ - ติดตั้งแพ็คเกจที่เหมาะสมกับระบบ (โดยใช้ตัวจัดการแพ็คเกจ // จากแหล่งที่มา // วิธีอื่น)

คืออะไรcc1:

cc1เป็นคำสั่งภายในที่ใช้ไฟล์ภาษาซีที่ประมวลผลล่วงหน้าและแปลงเป็นแอสเซมบลี เป็นส่วนจริงที่รวบรวม C สำหรับ C ++ มี cc1plus และคำสั่งภายในอื่น ๆ สำหรับภาษาต่างๆ

นำมาจากคำตอบนี้โดยอลัน Shutko

โซลูชันสำหรับ: Ubuntu / Linux Mint

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

แนวทางแก้ไขสำหรับ: สภาพแวดล้อม Docker-alpine

หากคุณอยู่ในสภาพแวดล้อมของนักเทียบท่า - อัลไพน์ให้ติดตั้งแพ็กเกจbuild-baseโดยเพิ่มสิ่งนี้ในDockerfile:

RUN apk add build-base

ชื่อแพคเกจที่ดีขึ้นให้โดยปาโบลแคสเทล เพิ่มเติมรายละเอียดที่นี่

หากคุณต้องการแพ็คเกจเพิ่มเติมเพื่อจุดประสงค์ในการสร้างให้พิจารณาเพิ่มแพ็คเกจalpine-sdk :

RUN apk add alpine-sdk

นำมาจากgithub

โซลูชันสำหรับ: CentOS / Fedora

คำตอบนี้มีคำแนะนำสำหรับ CentOS และ Fedora Linux

โซลูชันสำหรับ: Amazon Linux

sudo yum install gcc72-c++

นำมาจากความคิดเห็นนี้โดยCoderChris

คุณสามารถลองติดตั้งการอ้างอิงที่ไม่ได้รับจากสิ่งนี้ ( แม้ว่าจะมีการกล่าวว่าจะไม่แก้ปัญหา ):

sudo yum install gcc-c++.noarch

นำมาจากคำตอบนี้



64

บน debian / ubuntu ฉันแก้ไขปัญหานี้โดยการติดตั้งใหม่build-essential:

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

1
ในบันทึกสำหรับ ´- ติดตั้ง build-essential´ ใหม่ ubuntu ของฉันระบุโดยเฉพาะ "การตั้งค่า g ++ (4: 6.1.1-1ubuntu2) ... ทางเลือกการปรับปรุง: ใช้ / usr / bin / g ++ เพื่อให้ / usr / bin / c ++ (c ++) ในโหมดอัตโนมัติ "
Paamand

สิ่งนี้ทำให้ฉันได้รับ Debian DigitalOcean.com droplet ฉันต้องเรียกใช้คำสั่งที่สองที่แสดงแม้ว่าและหลังจากนั้น gcc รวบรวมโดยไฟล์. cpp อย่างสมบูรณ์แบบ
raddevus

1
@mchid ไม่มีอะไรผิดพลาด - แก้ไขปัญหาได้แล้ว แค่ต้องการชี้แจงว่าข้อเสนอแนะของคุณเกี่ยวข้องกับปัญหาในส่วนใด เช่นหากคำตอบของคุณไม่ได้ผลสำหรับคนที่พวกเขาสามารถใช้ทางเลือกการอัปเดตเฉพาะสำหรับ gcc
Paamand

26

เนื่องจากgccเรียกใช้ไฟล์ปฏิบัติการอื่น ๆ เพื่อดำเนินการประมวลผลอินพุตให้เสร็จสมบูรณ์และcc1ไม่อยู่ในพา ธ ที่รวม

whereis cc1กับชนิดของเปลือก หากcc1พบจะเป็นการดีกว่าที่จะสร้าง softlink ในไดเรกทอรีของgcc; มิฉะนั้นcc1จะไม่ได้ติดตั้งและคุณต้องติดตั้งgcc-c ++โดยใช้ตัวจัดการแพ็คเกจ


2
ขอบคุณสำหรับการตอบกลับ. โดยที่ cc1 ไม่คืนค่าอะไรเลย ฉันติดตั้ง gcc และ gcc-4.4, gcc-4-6, libgcc1 ตาม Software Manager ฉันเพิ่งติดตั้ง g ++ แต่ฉันยังคงได้รับข้อผิดพลาด
สกู๊ตเตอร์

2
ดูว่าไฟล์ปฏิบัติการอยู่ใน / usr / local / libexec / gcc / <architecture> / <compiler> / <compiler_version> / cc1 หรือไม่สำหรับการใช้งานชั่วคราวให้ไปที่ / usr / bin และสร้างลิงค์โดยln -s cc cc1
perilbrain

ฉันไม่มีไดเร็กทอรี / usr / local / libexec ไม่พบ "gcc" ภายใต้ / usr / local
สกู๊ตเตอร์

1
GCC อยู่ภายใต้ / usr / bin และคุณจะ cc เช่นกันดำเนินการคำสั่งที่กล่าวถึงในความคิดเห็นก่อนหน้าในไดเรกทอรีนี้
perilbrain

2
ไบนารี cc1 / cc1plus ไม่ควรอยู่ใน $ PATH
zwol

16

Amazon Linux: การแก้ไขปัญหา GCC

เนื่องจากสิ่งนี้เกิดขึ้นเป็นผลลัพธ์แรกใน Google ฉันแค่ต้องการบันทึกประสบการณ์ของฉันกับ Amazon Linux การติดตั้งgcc-c++.noarchแก้ไขปัญหา:

sudo yum install gcc-c++.noarch

บางคนรายงานว่าทางเลือกนี้เป็นวิธีแก้ปัญหา:

sudo yum install gcc72-c++


2
แน่นอนว่าปัญหาของฉันใน amazon linux แต่อนิจจา.noarchได้รับการติดตั้งแล้ว
ragerdl

10
sudo yum ติดตั้ง gcc72-c ++ จัดเรียงให้ฉันบน Amazon Linux
CoderChris

ดีใจที่มีคนพูดถึง Amazon Linux แต่โซลูชันเหล่านี้ไม่ได้ผลสำหรับฉัน ...
John Chrysostom

1
บน "Amazon Linux AMI 2018.03" ยำติดตั้ง gcc72-c ++ คือสิ่งที่ฉันต้องการเช่นกัน
Nick Lothian

1
sudo yum ติดตั้ง gcc72-c ++ ใช้ได้กับฉัน ขอบคุณมาก
Ilyas

13

วันนี้ฉันพบปัญหาที่คล้ายกัน - เพื่อนร่วมงานคนหนึ่งไม่สามารถสร้างซอฟต์แวร์ของเขาได้ แต่ฉันสามารถสร้างได้ เมื่อเขาวิ่งมันไม่สามารถหาgcccc1

เส้นทางปฏิบัติการของเขาดูสมเหตุสมผล แต่ความจริงที่ว่าฉันไม่สามารถจำลองความล้มเหลวได้อย่างง่ายดายแนะนำบางสิ่งในสภาพแวดล้อมของเขาว่าเป็นสาเหตุ

ในที่สุดเราก็พบ GCC_EXEC_PREFIXกำหนดไว้ในสภาพแวดล้อมของเขาซึ่งเป็นผู้กระทำความผิดและถูกทำให้เข้าใจผิดในการค้นหาgcc cc1นี่เป็นส่วนหนึ่งของสคริปต์การเริ่มต้นเชลล์ของเขาและมีจุดมุ่งหมายเพื่อแก้ไขข้อ จำกัด บนระบบ SPARC / Solaris ที่ไม่ได้ใช้งานอีกต่อไป ปัญหาได้รับการแก้ไขโดยการไม่ตั้งค่าตัวแปรสภาพแวดล้อมนี้

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


ปัญหาเดิม ๆ .. ยังแก้ไม่หาย! เหตุการณ์นี้เกิดขึ้นหลังจากย้ายโครงการจาก 16.04LTS เป็น 18.04LTS
เขย่า

11

ฉันแก้ไขปัญหานี้โดยการติดตั้ง g ++ อย่างชัดเจน:

sudo apt-get install g++

พบปัญหาบน Ubuntu 12.04 ขณะติดตั้งแพนด้า (ขอบคุณ perilbrain)


5

yum install gcc-c++ ได้ทำการแก้ไข


1
ซ้ำกับคำตอบที่มีอยู่ (ปัจจุบันเป็นคำตอบที่ได้รับการโหวตสูงสุดโพสต์หนึ่งปีก่อนคำตอบนี้) คำตอบ "ขอบคุณ" หรือ "ฉันด้วย" เป็นเพียงคำตอบ
Peter Cordes

4

ตรวจสอบให้แน่ใจGCC_EXEC_PREFIX(env)ว่าไม่ได้ส่งออกและPATHส่งออกไปยังห่วงโซ่เครื่องมือที่ถูกต้อง


2

ฉันพบปัญหานี้ในไม่ช้าหลังจากรวบรวมและติดตั้ง GCC ใหม่ - เวอร์ชัน 8.1 - บน RHEL 7 ในที่สุดมันก็กลายเป็นปัญหาการอนุญาต umask รูทของฉันเป็นผู้ร้าย ในที่สุดฉันก็พบว่าcc1ซ่อนตัวอยู่ใน/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

อย่างไรก็ตามสิทธิ์ในไดเรกทอรีที่นำหน้าไม่อนุญาตให้มีบัญชีผู้ใช้มาตรฐานของฉัน:

[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

การเรียกซ้ำอย่างรวดเร็วchmodเพื่อเพิ่มสิทธิ์ในการอ่าน / ดำเนินการทั่วโลกได้รับการแก้ไขแล้ว:

[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

และตอนนี้gccสามารถหาได้cc1เมื่อฉันขอให้รวบรวมบางสิ่ง!


1

นี่อาจเป็นข้อความแสดงข้อผิดพลาดที่ปรากฏขึ้นหากคุณพยายามเรียกใช้ไบนารี gcc 32 บิตบนระบบปฏิบัติการ 64 บิตและไม่มี glibc 32 บิต ตามreadmeนี้: "สำหรับระบบ 64 บิตจำเป็นต้องใช้ libc และ libncurses 32 บิตเพื่อเรียกใช้เครื่องมือ" ในกรณีนี้ไม่มีปัญหากับเส้นทางและพบ cc1 จริง แต่รายงานว่าหายไปเนื่องจากไม่มี glibc 32 บิต



1

เพียงเพื่อบันทึกปัญหาของฉันเกี่ยวกับปัญหานี้แม้ว่าจะดูเหมือนเป็นตัวอย่างเฉพาะของคำตอบอื่น ๆ ก็ตาม ในฐานะญาติมือใหม่ฉันรู้สึกว่าสิ่งนี้อาจช่วยคนอื่นได้

สารละลาย:

ฉันเพิ่ม '/ usr / bin' ที่จุดเริ่มต้นของ PATH สำหรับเซสชันเดียวโดยใช้ PATH='/usr/path/:$PATH'และทุกอย่างก็เริ่มทำงานได้ดี

ฉันใช้ gedit เพื่ออัปเดต PATH อย่างถาวรหลังจากที่แน่ใจว่ามันจะไม่ทำให้โซ่เครื่องมือปกติของฉันพัง

คำอธิบาย:

ฉันมีห่วงโซ่เครื่องมือหลายอันติดตั้งบน Ubuntu 14.04LTS และฉันใช้แค่สองสามอันเป็นประจำ เมื่อฉันพยายามใช้ gcc จากบรรทัดคำสั่งฉันได้รับคำอธิบายเกี่ยวกับปัญหาโดย OP '/ usr / bin' อยู่ใน PATH แต่อยู่หลังตำแหน่ง toolchain อื่น ๆ ปรากฎว่า cc1 สำหรับ toolchains อื่น ๆ นั้นเข้ากันไม่ได้กับ gcc


1

เพียงเพื่อเสริมคำตอบของ @ maxkoryukov เกี่ยวกับ Alpine

เท่ากับ Debian เป็นในอัลไพน์build-essential build-baseในความเป็นจริงดังกล่าวข้างต้นalpine-sdkขึ้นอยู่กับ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

ฉันประสบปัญหานี้ในการติดตั้ง Fedora 27 ใหม่พอสมควรฉันลองทำตามคำแนะนำอื่น ๆ ทั้งหมดหรือสิ่งที่เทียบเท่า การติดตั้งแพคเกจต่างๆอาจกล่าวว่า "ติดตั้งแล้ว" หรือติดตั้งสิ่งใหม่ซึ่งไม่ได้ช่วยอะไร

แก้ไขด้วย

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

0

บน Scientific Linux 6 (คล้ายกับ CentOS 6-- SL ถูกแทนที่ด้วย CentOS, AIUI) ฉันต้องใช้/usr/sbin/prelink -av -mRสิ่งที่ฉันพบที่แนะนำในhttps://stelfox.net/blog/2014/08/dependency-prelink-issues/

จนกระทั่งฉันทำเช่นนั้นฉันได้รับข้อผิดพลาด cc1 gcc: error trying to exec 'cc1': execvp: No such file or directoryเมื่อฉันพยายามรวบรวมและ gcc --version รายงาน 4.2.2 แทนที่จะเป็น 4.4.7 แม้ว่าเวอร์ชันนั้นจะรายงานโดย yum ก็ตาม

อาจเกี่ยวข้องหรือไม่ก็ได้ แต่ระบบมีพื้นที่ว่างบน / var


0

มันอยู่ในแพ็คเกจนี้ (Ubuntu 19.04):

  sudo apt install g++-6

คุณไม่จำเป็นต้องติดตั้ง G ++ เวอร์ชันเก่า ก็g++สบายดี หรือดีกว่าให้build-essentialดึง libs บางอย่างเข้ามาด้วย
Peter Cordes

0

ในกรณีที่หายากของฉันมันเป็นคนที่นิสัยเสียcolor wrapper gccแก้ไขได้โดยการปิดใช้งานการcwยกเว้นไดเร็กทอรี/usr/libexec/cwจากPATHตัวแปรสภาพแวดล้อม


0

ทำไมสิ่งนี้ถึงเกิดขึ้น? เมื่อคุณติดตั้ง linux ใหม่คอมไพเลอร์ gcc จะมาพร้อมกับมัน มีเฉพาะไฟล์และไบนารีที่ใช้ในการรัน linux (เพื่อประหยัดพื้นที่และเวลาอย่างเห็นได้ชัด)

วิธีแก้ข้อผิดพลาดนี้ สิ่งที่คุณต้องมีคืออัปเดตแพ็กเกจของคุณผ่านตัวจัดการแพ็กเกจและติดตั้งแพ็กเกจที่จำเป็นสำหรับการสร้างใหม่ คำสั่งอาจแตกต่างกันในเคอร์เนลที่แตกต่างกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.