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
В 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
Убедитесь, что ваш 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
переменная окружающей среды.
Вы можете исправить это, запустив это: На 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