Помилка Gcc: gcc: помилка при спробі виконувати 'cc1': execvp: Немає такого файлу чи каталогу


102

Я успішно використовую gcc на Linux Mint 12. Тепер я отримую помилку. Нещодавно я недавно робив деякі .so будує та встановлює Clang, але успішно компілював з тих пір ці події, тож не знаю, що змінилося. Я використовував диспетчер програмного забезпечення GUI, щоб видалити та встановити 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

Відповіді:


70

Пояснення

Повідомлення про помилку сказало нам, що залежність від часу складання (в даному випадку вона є cc1) не знайдена, тому все, що нам потрібно - встановити відповідний пакет до системи (використовуючи менеджер пакунків // з джерел // іншим способом)

Що таке cc1:

cc1це внутрішня команда, яка приймає попередньо оброблені файли на мові С та перетворює їх на збірку. Це фактична частина, яка компілює C. Для C ++ є cc1plus та інші внутрішні команди для різних мов.

взяті з цієї відповіді по Алан Шутко .

Рішення для: Ubuntu / Linux Mint

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

Рішення для: Докер-альпійського середовища

Якщо ви перебуваєте в докер-альпійському середовищі, встановіть пакет збірки , додавши це до свого Dockerfile:

RUN apk add build-base

Краще назва пакету, надане Pablo Castellano . Детальніше тут .

Якщо вам потрібно більше пакетів для будівельних цілей, розгляньте можливість додавання пакету 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

Взяте з цієї відповіді



63

На debian / ubuntu я виправив цю проблему шляхом перевстановлення build-essential:

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

1
У журналі для ´ - перевстановлення build-basic´ мого ubuntu спеціально вказано „Налаштування g ++ (4: 6.1.1-1ubuntu2) ... альтернативи оновлення: використання / usr / bin / g ++ для надання / usr / bin / c ++ (c ++) в автоматичному режимі "
Paamand

Це закріпило мене на краплі Debian DigitalOcean.com. Мені довелося лише запустити другу команду, показану, хоча і після цього gcc ідеально складений .cpp файл.
raddevus

1
@mchid Нічого поганого - це вирішило проблему. Просто хотів уточнити, яка частина вашої пропозиції стосується проблеми. Наприклад, якщо ваша відповідь не працює для когось, він може використовувати альтернативу оновлення, специфічну для gcc.
Пааман

26

Це тому, що gccвикликає багато інших виконуваних файлів, щоб завершити обробку вхідного сигналу, а cc1не входить у включений шлях.

За типом оболонки whereis cc1. Якщо cc1він знайдеться, краще продовжуйте і створюйте програмне посилання в каталозі 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, і там ви також будете копіювати, виконувати команду, згадану в попередньому коментарі в цьому каталозі.
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 install gcc72-c ++ сортував його для мене на Amazon Linux
CoderChris

Радий, що хтось говорить про Amazon Linux, але жодне з цих рішень не працювало на мене ...
Джон Златоуст

1
На "Amazon Linux AMI 2018.03" вам потрібно було також встановити gcc72-c ++.
Нік Лотьян

1
для мене працює sudo yum install gcc72-c ++. Велике спасибі
Ільяс

13

Я зіткнувся з подібною проблемою сьогодні - співробітник не міг створити своє програмне забезпечення, але я міг його створити. Коли він біг, gccйого не вдалося знайти cc1.

Його виконаний шлях виглядав розумним, але той факт, що я не міг легко повторити провал, підказав щось у його оточенні як причину.

Врешті-решт ми знайшли GCC_EXEC_PREFIXвизначеного в його оточенні винуватця і ввели gccв оману в пошуку cc1. Це було частиною його сценаріїв запуску оболонки і повинно було обійти обмеження щодо системи SPARC / Solaris, яка вже не використовується. Проблему було вирішено, не встановивши цю змінну середовища.

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


Точна ж проблема .. досі не вирішена! Це сталося після перенесення проекту з 16.04LTS до 18.04LTS.
Shaze

11

Я вирішив цю проблему, встановивши явно g ++:

sudo apt-get install g++

Під час встановлення панд у Ubuntu 12.04 виникла проблема. (Спасибі перилбраїну.)


5

yum install gcc-c++ зробив виправлення.


1
дублікат існуючої відповіді (на даний момент найбільше проголосував, розміщений за рік до цього). Відповіді "спасибі" або "мені теж" - це просто безлад.
Пітер Кордес

4

Переконайтеся, що ваш товар GCC_EXEC_PREFIX(env)не експортується, а ваш PATHекспортується в правий ланцюжок інструментів.


2

Я відчув це незабаром після того, як скомпілював та встановив новий блискучий GCC - версія 8.1 - на RHEL 7. Зрештою, це виявилось проблемою дозволів; винуватцем був мій кореневий умаск. Зрештою я виявився, що 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

Це може бути також відображене повідомлення про помилку, якщо ви спробуєте запустити 32-бітні gcc бінарні файли на 64-бітній ОС та відсутній 32-розрядний glibc. Згідно з цим readme : "Для 64-бітної системи для запуску інструментів потрібні 32-бітні libc та libncurses." У цьому випадку проблеми з трактом немає, і cc1 насправді знайдений, але повідомляється про відсутність як 32-бітний glibc.



1

Тільки для того, щоб задокументувати свою проблему з цим питанням, навіть якщо це, здається, є конкретним прикладом інших відповідей; як відносний новачок, я відчуваю, що це може допомогти іншим.

Рішення:

Я додав '/ usr / bin' до початку PATH для одного сеансу, використовуючи, PATH='/usr/path/:$PATH'і все почало працювати нормально.

Я використовував gedit для постійного оновлення PATH, впевнившись, що він не порушує мої звичайні ланцюги інструментів.

Пояснення:

У мене на Ubuntu 14.04LTS встановлено кілька ланцюжків інструментів, і я регулярно використовую лише пару. Коли я спробував використовувати gcc з командного рядка, я отримав опис проблеми в ОП. '/ usr / bin' знаходиться в PATH, але він знаходиться за іншими місцями ланцюжка інструментів. Виявляється, cc1 для цих інших ланцюжків інструментів несумісний з 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:

sudo dnf install redhat-rpm-config

0

Я зіткнувся з цією проблемою на досить свіжому встановленні Fedora 27. Я спробував усі інші пропозиції або їх еквіваленти; інсталяція різних пакетів або сказала "вже встановлений", або встановила щось нове, що не допомогло.

Виправлено за допомогою

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

0

У Науковому Linux 6 (схожий на CentOS 6-- SL тепер замінено CentOS, AIUI), мені довелося використовувати те, /usr/sbin/prelink -av -mRщо я знайшов запропонованим на https://stelfox.net/blog/2014/08/dependency-prelink-isissue/

Поки я не зробив це, у мене виник помилка 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тягне в певні також.
Пітер Кордес

0

У моєму рідкісному випадку це було color wrapperзіпсовано gcc. Вирішується шляхом відключення cwвиключення його каталогу /usr/libexec/cwіз PATHзмінної середовища.


0

Чому це відбувається? При встановленні нової копії Linux, компілятор gcc постачається з ним попередньо. Він містить лише файли та двійкові файли, які використовуються для запуску linux (очевидно, щоб заощадити місце та час).

Як вирішити цю помилку? Все, що вам потрібно, це оновити ваші пакунки через менеджер пакунків та встановити знову необхідні пакети. Команди можуть бути різними у різних ядрах.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.