Ответ 1
В debian/ubuntu я исправил эту проблему, переустановив build-essential
:
sudo apt-get update
sudo apt-get install --reinstall build-essential
Я успешно использовал 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
В debian/ubuntu я исправил эту проблему, переустановив build-essential
:
sudo apt-get update
sudo apt-get install --reinstall build-essential
На CentOS или Fedora
yum install gcc-c++
Сообщение об ошибке сообщило вам, что зависимость времени сборки (в данном случае это cc1
) не была найдена, поэтому все, что вам нужно - установить соответствующий пакет в вашу систему (используя менеджер пакетов, сборку из исходных кодов или другим способом).
Что такое cc1
:
cc1
- это внутренняя команда, которая берет предварительно обработанные файлы на языке C и преобразует их в сборку. Это фактическая часть, которая компилирует C. Для C++ есть cc1plus и другие внутренние команды для разных языков.
taken from this answer by Alan Shutko.
sudo apt-get install --reinstall build-essential
Если вы находитесь в среде docker-alpine, установите пакет build-base, добавив его в Dockerfile
:
RUN apk add build-base
Better package name provided by Pablo Castellano. More details here.
Если вам нужно больше пакетов для сборки, рассмотрите возможность добавления пакета alpine-sdk :
RUN apk add alpine-sdk
Taken from github
sudo yum install gcc72-c++
Taken from this comment by CoderChris
Вы также можете попытаться установить пропущенные зависимости следующим образом (хотя, как говорят, проблема не решается):
sudo yum install gcc-c++.noarch
Taken from this answer
Это связано с тем, что gcc
вызывает много других исполняемых файлов для завершения обработки ввода, а cc1
не находится во включенном пути.
На тип оболочки, whereis cc1
. Если cc1
найден, лучше создать софтлинк в каталоге gcc
; в противном случае cc1
не устанавливается, и вы должны установить gcc-С++ с помощью менеджера пакетов.
Amazon Linux: устранение проблемы GCC
Поскольку это первый результат в Google, я просто хотел документировать свой опыт работы с Amazon Linux. Установка gcc-c++.noarch
исправил проблему:
sudo yum install gcc-c++.noarch
Некоторые люди также сообщили об этой альтернативе в качестве решения:
sudo yum install gcc72-c++
Сегодня я столкнулся с подобной проблемой - сотрудник не смог создать свое программное обеспечение, но я мог бы его построить. Когда он побежал gcc
, он не смог найти cc1
.
Его исполняемый путь выглядел разумным, но тот факт, что я не мог легко воспроизвести неудачу, предложил что-то в его среде как причина.
В итоге мы обнаружили GCC_EXEC_PREFIX
, определенный в его среде, который был виновником, и вводил в заблуждение gcc
в поиске cc1
. Это было частью его сценариев запуска оболочки и предназначалось для ограничения ограничений в системе SPARC/Solaris, которая больше не используется. Проблема была решена, если не установить эту переменную среды.
http://gcc.gnu.org/onlinedocs/gcc/Environment-Variables.html
Я исправил эту проблему, явно установив g++:
sudo apt-get install g++
Проблема возникла на Ubuntu 12.04 при установке pandas. (Спасибо perilbrain.)
yum install gcc-c++
сделал исправление.
Убедитесь, что ваш GCC_EXEC_PREFIX(env)
не экспортирован, а ваш PATH
экспортирован в правую цепочку инструментов.
Я испытал это вскоре после компиляции и установки блестящего нового GCC - версии 8.1 - на RHEL 7. В конце концов, это оказалось проблемой с разрешениями; мой корневой umask был виновником. В итоге я обнаружил, что cc1
скрывается в /usr/local/libexec
:
[[email protected] 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
Однако разрешения на каталоги, ведущие туда, не позволяли моей стандартной учетной записи пользователя:
[[email protected] gdb-8.1]# ls -l /usr/local/libexec/
total 4
drwxr-x--- 3 root root 4096 Jul 2 13:53 gcc
[[email protected] 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
[[email protected] 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
для добавления прав на чтение/выполнение в мире исправлено:
[[email protected] 8.1.0]# cd /usr/local/libexec
[[email protected] lib]# ls -l | grep gcc
drwxr-x--- 3 root root 4096 Jul 2 13:53 gcc
[[email protected] lib]# chmod -R o+rx gcc
[[email protected] lib]# ls -l | grep gcc
drwxr-xr-x 3 root root 4096 Jul 2 13:53 gcc
И теперь gcc
может найти cc1
когда я попрошу его скомпилировать что-нибудь!
Это может быть также отображаемое сообщение об ошибке, если вы пытаетесь запустить 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/bin в начало PATH для одного сеанса, используя PATH='/usr/path/:$PATH'
, и все начало работать нормально.
Я использовал gedit для постоянного обновления PATH, убедившись, что он не сломает мои обычные наборы инструментов.
Объяснение:
У меня установлено несколько наборов инструментов в Ubuntu 14.04LTS, и я регулярно использую только пару. Когда я попытался использовать gcc из командной строки, у меня возникла проблема, описанная OP. "/usr/bin" находится в PATH, но находится за другими местами цепочки инструментов. Оказывается, что cc1 для этих других наборов инструментов несовместим с gcc.
Просто чтобы дополнить @maxkoryukov ответ по поводу Alpine.
Эквивалентом Debian build-essential
в Alpine является 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
Вы можете исправить это, выполнив это: На Fedora:
sudo dnf install redhat-rpm-config
Я испытал эту проблему на достаточно свежей установке Fedora 27. Я пробовал все другие предложения или их эквиваленты; устанавливая различные пакеты либо "уже установленные", либо устанавливая что-то новое, что не помогло.
Исправлено:
# dnf remove gcc
# dnf install gcc gcc-c++
На Scientific Linux 6 (аналогично CentOS 6-- SL теперь заменена CentOS, AIUI), мне пришлось использовать /usr/sbin/prelink -av -mR
который я нашел в https://stelfox.net/blog/2014/08/зависимости Prelink-вопросы/
Пока я не сделал этого, у меня возникла ошибка cc1 gcc: error trying to exec 'cc1': execvp: No such file or directory
когда я пытался скомпилировать, а gcc --version сообщил 4.2.2 вместо 4.4.7, несмотря на это версия сообщается yum.
Это может быть или не быть связано, но в системе не было места на /var
Это в этом пакете (Ubuntu 19.04):
sudo apt install g++-6