GCC ошибка: gcc: ошибка при попытке выполнить "cc1": execvp: нет такого файла или каталога

Я успешно использую gcc в Linux Mint 12. Теперь я получаю сообщение об ошибке. Недавно я делал несколько сборок.so и установил 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

26 ответов

1. Объяснение

Сообщение об ошибке говорит вам, что зависимость времени сборки не найдена, поэтому все, что вам нужно - установить соответствующий пакет в вашу систему (используя менеджер пакетов, сборку из исходных кодов или другим способом).

Что такое cc1:

cc1 это внутренняя команда, которая берет предварительно обработанные файлы на языке C и преобразует их в сборку. Это фактическая часть, которая компилирует C. Для C++ есть cc1plus и другие внутренние команды для разных языков.

взято из этого ответа Аланом Шутко.

2. Решения

Ubuntu / Linux Mint

sudo apt-get install --reinstall build-essential

Докер-альпийская среда

Если вы находитесь в среде docker-alpine, добавьте это:

RUN apk add alpine-sdk

на ваш Dockerfile,

Взято из github

На CentOS или Fedora

yum install gcc-c++ 

В Debian / Ubuntu я исправил эту проблему, переустановив build-essential:

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

Это связано с тем, что gcc вызывает много других исполняемых файлов для полной обработки ввода, а cc1 находится не во включенном пути.

По типу оболочки:-

whereis cc1

если cc1 найден, лучше создать софтлинк в каталоге gcc, иначе это означает, что cc1 не установлен и вам нужно установить gcc-c++ используя менеджер пакетов.

Amazon Linux: исправление проблемы с GCC

Поскольку это первый результат в Google, я просто хотел задокументировать свой опыт работы с Amazon Linux. Установка gcc-c++.noarch исправил проблему:

sudo yum install gcc-c++.noarch

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

sudo apt-get install g++

Проблема возникла в Ubuntu 12.04 при установке панд. (Спасибо Perilbrain.)

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

Его исполняемый путь выглядел разумным, но тот факт, что я не мог легко воспроизвести ошибку, предполагал что-то в его среде как причину.

В конце концов мы нашли GCC_EXEC_PREFIX определены в его среде, которая была виновником и вводит в заблуждение gcc в поисках cc1, Это было частью его сценариев запуска оболочки и должно было обойти ограничение в системе SPARC/Solaris, которая больше не используется. Проблема была решена путем не установки этой переменной среды.

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

yum install gcc-c++ сделал исправление.

Убедитесь, что ваш GCC_EXEC_PREFIX(env) не экспортируется и ваш PATH экспортируется в правую цепочку инструментов.

Добавление моего решения для Amazon Linux - Работа в 2021 году:

      sudo yum install gcc

а потом:

      sudo yum install gcc-c++

Просто чтобы дополнить ответ @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

Для Amazon Linux Release 2 Это решит проблему:

      sudo yum install gcc-c++

(Так не пойдет: sudo yum install gcc72-c++)

Я испытал это вскоре после компиляции и установки новой блестящей 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 когда я прошу это скомпилировать что-то!

Просто для того, чтобы задокументировать мою проблему с этим вопросом, даже если это просто конкретный пример других ответов; как относительный новичок, я чувствую, что это может помочь другим.

Решение:

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

Я использовал gedit для постоянного обновления PATH, убедившись, что он не сломает мои обычные цепочки инструментов.

Объяснение:

У меня установлено несколько наборов инструментов в Ubuntu 14.04LTS, и я регулярно использую только пару. Когда я попытался использовать gcc из командной строки, у меня возникла проблема, описанная OP. "/usr/bin" находится в PATH, но он находится за другими местами цепочки инструментов. Оказывается, что cc1 для этих других наборов инструментов несовместим с gcc.

Это также может быть отображаемое сообщение об ошибке, если вы попытаетесь запустить 32-разрядные двоичные файлы gcc в 64-разрядной ОС и пропустите 32-разрядный glibc. Согласно этому readme: "Для 64-битной системы 32-битные libc и libncurses требуются для запуска инструментов". В этом случае нет проблем с путем, и cc1 фактически найден, но сообщается как отсутствующий как 32-битный glibc.

Что помогло мне было использовать llvm-gcc вместо:

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

Я хотел бы добавить дополнительный ответ, для тех, кому больше всего понравился, ответ не помог.

Я случайно удалил некоторые файлы в /usr/lib а также /usr/local/bin так apt не удалось переустановить gcc а также build-essentialпакеты правильно. Я пробовал почти все, но в конце помогло только восстановление всего дерева зависимостей. В Ubuntu 20.04 я выполнил следующее:

      sudo apt install --reinstall \
    binutils \
    binutils-common \
    binutils-x86-64-linux-gnu \
    cpp \
    cpp-9 \
    gcc \
    gcc-10-base \
    gcc-9 \
    gcc-9-base \
    libasan5 \
    libatomic1 \
    libbinutils \
    libc-dev-bin \
    libc6 \
    libc6-dev \
    libcc1-0 \
    libcrypt-dev \
    libcrypt1 \
    libctf-nobfd0 \
    libctf0 \
    libgcc-9-dev \
    libgcc-s1 \
    libgmp10 \
    libgomp1 \
    libidn2-0 \
    libisl22 \
    libitm1 \
    liblsan0 \
    libmpc3 \
    libmpfr6 \
    libquadmath0 \
    libstdc++6 \
    libtsan0 \
    libubsan1 \
    libunistring2 \
    linux-libc-dev \
    manpages \
    manpages-dev \
    zlib1g

Я столкнулся с этой проблемой на достаточно свежей установке Fedora 27. Я попробовал все другие предложения или их эквиваленты; установка различных пакетов либо сказала "уже установлено", либо установила что-то новое, что не помогло.

Исправлено с

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

В моем редком случае переменная PATH была установлена, но не экспортирована. Эту проблему решал простой экспорт переменной PATH.

На 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

Почему это происходит? Когда вы устанавливаете новую копию linux, компилятор gcc поставляется с ней заранее упакованным. Он содержит только файлы и двоичные файлы, которые используются для запуска Linux(очевидно, для экономии места и времени).

Как решить эту ошибку? Все, что вам нужно, это обновить свои пакеты через диспетчер пакетов и переустановить пакеты, необходимые для сборки. Команды могут отличаться на разных ядрах.

Просто пример. Вы можете найти свойcc1установленный в других местах, зависит от того, какое программное обеспечение было установлено ранее.

      find /usr/ -name "*cc1*"
# out:  /usr/share/terminfo/x/xterm+pcc1
# out:  /usr/libexec/gcc/x86_64-redhat-linux/4.8.2/cc1
# out: /usr/libexec/gcc/x86_64-redhat-linux/4.8.2/cc1plus
export PATH=$PATH:/usr/libexec/gcc/x86_64-redhat-linux/4.8.2/

кредит принадлежит программистам

В моем редком случае это было color wrapper кто испортил gcc. Решено отключениемcw исключая его каталог /usr/libexec/cw из PATH переменная окружающей среды.

В этом пакете (Ubuntu 19.04):

  sudo apt install g++-6

Вы можете исправить это, запустив это: На Fedora:

sudo dnf install redhat-rpm-config

Документирование еще одного источника ошибок при установке gcc-10 на Amazon Linux 2 из исходников.

После запуска и тестирования gcc-10 У меня такая ошибка:

      gcc-10: fatal error: cannot execute ‘cc1’: execvp: No such file or directory

Причина в том, что новые каталоги g ++ в /usr/local/ были созданы sudo make install имеют 700 разрешения, поэтому пользователи без полномочий root не могут видеть содержимое каталогов.

Я исправил это, запустив

      sudo find /usr/local/ -type d -exec chmod 755 {} \;

Обратите внимание, что я следил за этим фрагментом https://gist.github.com/nchaigne/ad06bc867f911a3c0d32939f1e930a11

Другие вопросы по тегам