Lỗi gcc: gcc: lỗi khi cố gắng thực thi 'cc1': executevp: Không có tệp hoặc thư mục nào như vậy


102

Tôi đã sử dụng thành công gcc trên Linux Mint 12. Bây giờ tôi gặp lỗi. Gần đây tôi đã thực hiện một số bản dựng .so và cài đặt Clang cách đây không lâu, nhưng đã biên dịch thành công kể từ cả hai sự kiện đó, vì vậy không chắc những gì đã thay đổi. Tôi đã sử dụng Trình quản lý phần mềm GUI để xóa và sau đó cài đặt lại gcc, nhưng kết quả vẫn như cũ:

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

Câu trả lời:


68

Giải trình

Thông báo lỗi cho chúng tôi biết rằng cc1không tìm thấy phụ thuộc thời gian xây dựng (trong trường hợp này là ), vì vậy tất cả những gì chúng tôi cần - cài đặt gói thích hợp vào hệ thống (sử dụng trình quản lý gói // từ các nguồn // một cách khác)

Là gì cc1:

cc1là lệnh nội bộ lấy các tệp ngôn ngữ C được xử lý trước và chuyển đổi chúng thành hợp ngữ. Đó là phần thực sự biên dịch C. Đối với C ++, có cc1plus và các lệnh nội bộ khác cho các ngôn ngữ khác nhau.

lấy từ câu trả lời này của Alan Shutko .

Giải pháp cho: Ubuntu / Linux Mint

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

Giải pháp cho: Môi trường Docker-alpine

Nếu bạn đang ở trong môi trường docker-alpine, hãy cài đặt gói build-base bằng cách thêm gói này vào Dockerfile:

RUN apk add build-base

Tên gói tốt hơn do Pablo Castellano cung cấp . Thêm chi tiết tại đây .

Nếu bạn cần nhiều gói hơn cho mục đích xây dựng, hãy xem xét thêm gói alpine-sdk :

RUN apk add alpine-sdk

Lấy từ github

Giải pháp cho: CentOS / Fedora

Câu trả lời này này chứa các hướng dẫn cho CentOS và Fedora Linux

Giải pháp cho: Amazon Linux

sudo yum install gcc72-c++

Lấy từ bình luận này của CoderChris

Bạn cũng có thể thử cài đặt các phần phụ thuộc bị bỏ lỡ bằng cách này ( mặc dù, nó được cho là không giải quyết được vấn đề ):

sudo yum install gcc-c++.noarch

Lấy từ câu trả lời này



63

Trên debian / ubuntu, tôi đã khắc phục sự cố này bằng cách cài đặt lại build-essential:

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

1
Trong nhật ký cho ´ - reinstall build-essential´ ubuntu của tôi đã nêu cụ thể "Thiết lập g ++ (4: 6.1.1-1ubuntu2) ... update-Alternatives: using / usr / bin / g ++ to supply / usr / bin / c ++ (c ++) ở chế độ tự động "
Paamand

Điều này đã khắc phục sự cố của tôi trên giọt Debian DigitalOcean.com. Tôi chỉ phải chạy lệnh thứ hai được hiển thị và sau đó gcc được biên dịch bởi tệp .cpp một cách hoàn hảo.
raddevus

1
@mchid Không có gì sai - Nó đã khắc phục sự cố. Chỉ muốn làm rõ những gì bạn đề xuất liên quan đến vấn đề. Ví dụ: nếu câu trả lời của bạn không phù hợp với ai đó, họ có thể sử dụng phương án thay thế cập nhật cụ thể cho gcc.
Paamand

26

Điều này là do gcclệnh gọi nhiều tệp thực thi khác để hoàn tất quá trình xử lý đầu vào và cc1không có trong đường dẫn được bao gồm.

Trên loại vỏ whereis cc1. Nếu cc1được tìm thấy, tốt hơn hãy tiếp tục và tạo một liên kết mềm trong thư mục của gcc; nếu không, cc1không được cài đặt và bạn phải cài đặt gcc-c ++ bằng trình quản lý gói.


2
Cảm ơn vi đa trả lơi. trong đó cc1 không trả về gì. Tôi đã cài đặt gcc và gcc-4.4, gcc-4-6, libgcc1 theo Trình quản lý phần mềm. Tôi vừa cài đặt g ++ nhưng vẫn gặp lỗi.
Scooter

2
xem nếu thực thi có mặt trong / usr / local / libexec / gcc / <kiến trúc> / <biên dịch> / <compiler_version> / cc1 khác để sử dụng tạm thời điều hướng đến / usr / bin và tạo liên kết bởiln -s cc cc1
perilbrain

Tôi không có thư mục / usr / local / libexec. Không có "gcc" nào được tìm thấy trong / usr / local.
Scooter

1
GCC nằm dưới / usr / bin và ở đó bạn cũng sẽ cc, thực hiện lệnh được đề cập trong bình luận trước trong thư mục này.
perilbrain

2
Các mã nhị phân cc1 / cc1plus KHÔNG được phép ở trong $ PATH.
zwol

16

Amazon Linux: khắc phục sự cố GCC

Vì đây là kết quả đầu tiên trên Google nên tôi chỉ muốn ghi lại trải nghiệm của mình với Amazon Linux. Cài đặt đã gcc-c++.noarchkhắc phục sự cố:

sudo yum install gcc-c++.noarch

Một số người cũng báo cáo thay thế này như một giải pháp:

sudo yum install gcc72-c++


2
Chắc chắn là vấn đề của tôi trên amazon linux, nhưng than ôi, .noarchđã được cài đặt.
ragerdl

10
sudo yum install gcc72-c ++ sắp xếp nó cho tôi trên Amazon Linux
CoderChris

Nói chuyện vui của ai đó về Amazon Linux, nhưng không có giải pháp làm việc cho tôi ...
John Chrysostom

1
Trên "Amazon Linux AMI 2018.03", tôi cũng cần cài đặt gcc72-c ++.
Nick Lothian

1
sudo yum cài đặt gcc72-c ++ phù hợp với tôi. Cảm ơn rất nhiều
Ilyas

13

Hôm nay tôi gặp phải một vấn đề tương tự - một đồng nghiệp không thể xây dựng phần mềm của anh ấy nhưng tôi có thể xây dựng nó. Khi anh chạy gccnó không thể tìm thấy cc1.

Con đường thực thi của anh ấy trông có vẻ hợp lý nhưng thực tế là tôi không thể dễ dàng lặp lại sự thất bại đã gợi ý nguyên nhân là một điều gì đó trong môi trường của anh ấy.

Cuối cùng, chúng tôi tìm thấy GCC_EXEC_PREFIXtrong môi trường của anh ta được xác định là thủ phạm và đã gây hiểu lầm gcckhi tìm kiếm cc1. Đây là một phần của các tập lệnh khởi động shell của anh ấy và nhằm khắc phục hạn chế trên hệ thống SPARC / Solaris không còn được sử dụng. Sự cố đã được giải quyết bằng cách không đặt biến môi trường này.

http://gcc.gnu.org/onlineocs/gcc/Enosystem-Variables.html


Chính xác vấn đề tương tự .. vẫn chưa được giải quyết! Điều này xảy ra sau khi chuyển dự án từ 16.04LTS sang 18.04LTS.
Shaze

11

Tôi đã khắc phục sự cố này bằng cách cài đặt rõ ràng g ++:

sudo apt-get install g++

Đã gặp sự cố trên Ubuntu 12.04 khi cài đặt gấu trúc. (Cảm ơn perilbrain.)


5

yum install gcc-c++ đã sửa chữa.


1
trùng lặp với một câu trả lời hiện có (hiện là câu trả lời được bình chọn cao nhất, được đăng trước câu trả lời này một năm). Câu trả lời "Cảm ơn" hoặc "tôi cũng vậy" chỉ là lộn xộn.
Peter Cordes

4

Đảm bảo rằng của bạn GCC_EXEC_PREFIX(env)không được xuất và của bạn PATHđược xuất sang đúng chuỗi công cụ.


2

Tôi đã gặp phải vấn đề này ngay sau khi biên dịch và cài đặt GCC mới sáng bóng - phiên bản 8.1 - trên RHEL 7. Cuối cùng, nó đã trở thành vấn đề về quyền; umask gốc của tôi là thủ phạm. Cuối cùng tôi đã tìm thấy cc1ẩn trong /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

Tuy nhiên, quyền trên các thư mục dẫn đến đó không cho phép tài khoản người dùng chuẩn của tôi:

[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

Một đệ quy nhanh chóng chmodđể thêm quyền đọc / thực thi thế giới đã sửa nó ngay:

[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

Và bây giờ gcccó thể tìm thấy cc1khi tôi yêu cầu nó biên dịch một cái gì đó!


1

Đây cũng có thể là thông báo lỗi được hiển thị nếu bạn cố gắng chạy mã nhị phân gcc 32 bit trên hệ điều hành 64 bit và thiếu glibc 32 bit. Theo readme này : "Đối với hệ thống 64 bit, libc và libncurses 32 bit được yêu cầu để chạy các công cụ.". Trong trường hợp này, không có vấn đề gì với đường dẫn và cc1 thực sự được tìm thấy, nhưng được báo cáo là bị thiếu vì không có glibc 32 bit.


1

Điều giúp ích cho tôi là sử dụng llvm-gccthay thế:

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

1

Chỉ để ghi lại rắc rối của tôi với vấn đề này mặc dù nó chỉ là một ví dụ cụ thể cho các câu trả lời khác; là một người mới tương đối, tôi cảm thấy điều này có thể giúp ích cho những người khác.

Giải pháp:

Tôi đã thêm '/ usr / bin' vào đầu PATH cho một phiên sử dụng duy nhất PATH='/usr/path/:$PATH'và mọi thứ bắt đầu hoạt động tốt.

Tôi đã sử dụng gedit để cập nhật PATH vĩnh viễn, sau khi đảm bảo nó sẽ không phá vỡ các hàng công cụ thông thường của tôi.

Giải trình:

Tôi đã cài đặt nhiều toolchains trên Ubuntu 14.04LTS và tôi chỉ sử dụng một vài công cụ thường xuyên. Khi tôi cố gắng sử dụng gcc từ dòng lệnh, tôi nhận được sự cố được mô tả bởi OP. '/ usr / bin' nằm trong PATH nhưng nó nằm sau các vị trí chuỗi công cụ khác. Hóa ra cc1 cho những công cụ khác không tương thích với gcc.


1

Chỉ để bổ sung cho câu trả lời của @ maxkoryukov về Alpine.

Tương đương với Debian build-essentialở Alpine là build-base. Trong thực tế, những điều được đề cập ở trên alpine-sdkphụ thuộc vào 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

Bạn có thể khắc phục điều đó bằng cách chạy cái này: Trên Fedora:

sudo dnf install redhat-rpm-config

0

Tôi đã gặp sự cố này trên một bản cài đặt mới hợp lý của Fedora 27. Tôi đã thử tất cả các đề xuất khác hoặc các đề xuất tương đương của chúng; cài đặt các gói khác nhau hoặc được cho biết "đã được cài đặt" hoặc cài đặt một cái gì đó mới không giúp được gì.

Đã sửa với

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

0

Trên Scientific Linux 6 (tương tự như CentOS 6-- SL hiện được thay thế bằng CentOS, AIUI), tôi phải sử dụng /usr/sbin/prelink -av -mRcái mà tôi thấy được đề xuất tại https://stelfox.net/blog/2014/08/dependency-prelink-issues/

Cho đến khi tôi làm điều đó, tôi đã gặp lỗi cc1 gcc: error trying to exec 'cc1': execvp: No such file or directorykhi cố biên dịch và gcc --version đã báo cáo 4.2.2 thay vì 4.4.7, mặc dù phiên bản đó đã được yum báo cáo.

Nó có thể liên quan hoặc không, nhưng hệ thống đã hết dung lượng trên / var


0

Nó nằm trong gói này (Ubuntu 19.04):

  sudo apt install g++-6

Bạn không cần cài đặt phiên bản G ++ cũ; chỉ g++là tốt. Hoặc tốt hơn, hãy build-essentialkéo một số lib nữa.
Peter Cordes

0

Trong trường hợp hiếm hoi của tôi, đó là color wrapperngười làm hỏng gcc. Giải quyết bằng cách tắt cwloại trừ thư mục của nó /usr/libexec/cwkhỏi PATHbiến môi trường.


0

Lý do tại sao điều này xảy ra? Khi bạn cài đặt một bản sao mới của linux, trình biên dịch gcc đi kèm với nó. Nó chỉ chứa các tệp và mã nhị phân được sử dụng để chạy linux (hiển nhiên là để tiết kiệm không gian và thời gian).

Làm thế nào để giải quyết lỗi này? Tất cả những gì bạn cần là cập nhật các gói của mình thông qua trình quản lý gói và cài đặt lại các gói thiết yếu. Các lệnh có thể khác nhau trên các hạt nhân khác nhau.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.