141

我已经在 Linux Mint 12 上成功使用 gcc。现在我遇到了一个错误。我最近一直在做一些 .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
4

25 回答 25

126

解释

错误消息告诉我们,未找到构建时依赖项(在本例中为cc1),因此我们只需要 - 将适当的包安装到系统(使用包管理器 // 从源代码 // 另一种方式)

什么是cc1

cc1是一个内部命令,它接受预处理的 C 语言文件并将它们转换为汇编。它是编译 C 的实际部分。对于 C++,有 cc1plus 和其他用于不同语言的内部命令。

取自Alan Shutko的这个答案。

解决方案:Ubuntu / Linux Mint

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

解决方案:Docker-alpine 环境

如果您在docker-alpine环境中,请通过将以下内容添加到您的安装build-baseDockerfile包:

RUN apk add build-base

更好的包名由Pablo Castellano提供。更多细节在这里

如果您需要更多软件包用于构建目的,请考虑添加alpine-sdk软件包:

RUN apk add alpine-sdk

取自github

解决方案:CentOS/Fedora

此答案包含 CentOS 和 Fedora Linux 的说明

解决方案:亚马逊 Linux

sudo yum install gcc72-c++

取自CoderChris评论

您也可以尝试通过此安装缺少的依赖项(尽管据说不能解决问题):

sudo yum install gcc-c++.noarch

取自这个答案

于 2017-06-22T20:00:34.687 回答
88

在 CentOS 或 Fedora 上

yum install gcc-c++ 
于 2017-07-30T18:14:02.400 回答
66

在 debian / ubuntu 我通过重新安装解决了这个问题build-essential

sudo apt-get update
sudo apt-get install --reinstall build-essential
于 2016-08-03T03:33:38.657 回答
29

这是因为gcc调用了许多其他可执行文件来完成输入的处理,并且cc1不在包含的路径中。

在壳型whereis cc1上。如果cc1找到,最好在gcc; 的目录下创建一个软链接。否则,cc1未安装,您必须使用包管理器安装gcc-c++ 。

于 2012-08-11T07:40:13.610 回答
18

Amazon Linux:修复 GCC 问题

由于这是在 Google 上出现的第一个结果,因此我只想记录下我使用 Amazon Linux 的经验。安装gcc-c++.noarch解决了问题:

sudo yum install gcc-c++.noarch

有些人还报告了这种替代方案作为解决方案:

sudo yum install gcc72-c++

于 2018-01-03T12:00:49.370 回答
15

我通过显式安装 g++ 解决了这个问题:

sudo apt-get install g++

安装 pandas 时在 Ubuntu 12.04 上遇到问题。(感谢 perilbrain。)

于 2017-03-15T16:02:23.473 回答
13

我今天遇到了类似的问题 - 一位同事无法构建他的软件,但我可以构建它。他跑的gcc时候也找不到cc1

他的可执行路径看起来很合理,但我无法轻易复制失败的事实表明他的环境中存在某些原因。

最终,我们发现GCC_EXEC_PREFIX在他的环境中定义了这是罪魁祸首,并且gcc在搜索cc1. 这是他的 shell 启动脚本的一部分,旨在解决不再使用的 SPARC/Solaris 系统的限制。通过不设置此环境变量解决了该问题。

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

于 2013-03-07T04:07:43.050 回答
6

yum install gcc-c++ 做了修复。

于 2018-02-15T09:17:14.330 回答
4

确保您GCC_EXEC_PREFIX(env)的未导出并且您PATH已导出到正确的工具链。

于 2013-03-31T21:07:45.953 回答
3

我在 RHEL 7 上编译和安装了一个闪亮的新 GCC(8.1 版)后不久就遇到了这种情况。最后,它最终成为了权限问题;我的根 umask 是罪魁祸首。我最终发现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当我要求它编译的东西了!

于 2018-07-06T21:53:40.233 回答
2

只是为了补充@maxkoryukov 关于高山的回答。

build-essential在 Alpine 中相当于 Debian 的是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
于 2019-02-18T16:17:16.293 回答
1

如果您尝试在 64 位操作系统上运行 32 位 gcc 二进制文件并且缺少 32 位 glibc,这也可能是显示的错误消息。根据这个自述文件:“对于 64 位系统,运行工具需要 32 位 libc 和 libncurses。”。在这种情况下,路径没有问题,实际上找到了 cc1,但报告为缺少32 位 glibc。

于 2016-02-29T12:56:45.447 回答
1

我在相当全新的 Fedora 27 安装中遇到了这个问题。我尝试了所有其他建议或它们的等价物;安装各种软件包要么说“已经安装”,要么安装了一些没有帮助的新东西。

固定与

# dnf remove gcc
# dnf install gcc gcc-c++
于 2018-01-24T22:17:21.823 回答
1

只是为了记录我在这个问题上遇到的麻烦,即使它似乎只是其他答案的一个具体例子;作为一个相对新手,我觉得这可能对其他人有所帮助。

解决方案:

我将 '/usr/bin' 添加到 PATH 的开头以使用单个会话,PATH='/usr/path/:$PATH'并且一切都开始正常工作。

在确保它不会破坏我的常规工具链之后,我使用 gedit 永久更新 PATH。

解释:

我在 Ubuntu 14.04LTS 上安装了多个工具链,我只定期使用几个。当我尝试从命令行使用 gcc 时,我遇到了 OP 描述的问题。'/usr/bin' 在 PATH 中,但它位于其他工具链位置的后面。原来那些其他工具链的 cc1 与 gcc 不兼容。

于 2018-04-09T14:07:17.710 回答
1

对我有帮助的是llvm-gcc改用:

ln -s $(which llvm-gcc) /usr/local/bin/gcc
于 2016-07-29T17:20:56.237 回答
0

记录在 Amazon Linux 2 上从源代码安装 gcc-10 的另一个错误源。

运行sudo make install然后测试后,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

于 2021-01-09T04:07:26.840 回答
0

在我罕见的情况下,是color wrapper谁宠坏了gcc。通过禁用从环境变量中cw排除其目录来解决。/usr/libexec/cwPATH

于 2019-12-02T12:03:57.910 回答
0

它在这个包中(Ubuntu 19.04):

  sudo apt install g++-6
于 2019-02-20T02:44:31.273 回答
0

在我的罕见情况下,PATH 变量已设置但未导出。简单地导出 PATH 变量就可以解决这个问题。

于 2021-08-20T20:24:00.020 回答
0

在 Scientific Linux 6(类似于 CentOS 6——SL 现在被 CentOS、AIUI 取代)上,我不得不使用我在https://stelfox.net/blog/2014/08/dependency-prelink-issues//usr/sbin/prelink -av -mR上发现的建议

在我这样做之前,我在gcc: error trying to exec 'cc1': execvp: No such file or directory尝试编译时遇到了 cc1 错误,并且 gcc --version 报告了 4.2.2 而不是 4.4.7,尽管 yum 报告了该版本。

它可能相关也可能不相关,但系统已用完 /var 上的空间

于 2018-02-22T11:03:49.907 回答
0

为什么会这样?当您安装新的 linux 副本时,gcc 编译器会预先打包。它只包含用于运行 linux 的文件和二进制文件(显然是为了节省空间和时间)。

如何解决这个错误?您所需要的只是通过包管理器更新您的包并重新安装构建必需的包。不同内核上的命令可能不同。

于 2020-07-02T09:52:13.623 回答
0

我想添加一些额外的答案,对于那些最喜欢的答案没有帮助的人。

我不小心删除了其中的一些文件,/usr/lib因此/usr/local/bin无法apt正确重新安装gccbuild-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
于 2021-10-18T07:05:31.330 回答
0

添加我的Amazon Linux解决方案- 2021 年工作:

sudo yum install gcc

接着:

sudo yum install gcc-c++
于 2021-05-23T03:02:02.220 回答
0

对于Amazon Linux Release 2这将解决问题:

sudo yum install gcc-c++

(这不起作用sudo yum install gcc72-c++:)

于 2021-11-11T22:01:09.620 回答
-1

你可以通过运行这个来解决这个问题: 在 Fedora 上:

sudo dnf install redhat-rpm-config
于 2016-07-19T18:30:55.493 回答