GCC错误:gcc:尝试执行'cc1'时出错:execvp:没有这个文件或目录。

174

我一直在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

26个回答

167

解释

错误信息告诉我们,构建时依赖项(在本例中是 cc1)未找到,所以我们需要做的就是将适当的软件包安装到系统中(使用软件包管理器 // 从源代码 // 另一种方式)。

cc1 是什么:

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

取自此答案 by Alan Shutko

Ubuntu / Linux Mint 解决方案

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

解决方案:Docker-alpine 环境

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

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++

本文翻译:Taken from this comment by CoderChris

您还可以尝试通过以下方式安装缺失的依赖项(尽管据说这并不能解决问题):

sudo yum install gcc-c++.noarch

来自这个答案


5
在Ubuntu 20.04.2上对我没有起作用。 - exebook
5
对于亚马逊 Linux 2 系统而言,sudo yum install gcc72-c++ 对我来说没用,但是 sudo yum install gcc-c++ 很好用。 - PApostol
1
非常好,@maxkoryukov回答得很全面。我从中学到了东西。谢谢! - EmEs
2
在OpenSuse中运行zypper install -t pattern devel_basis不会安装C++,请运行zypper install gcc-c++以添加它。 - Jari Turkia
1
对于RHEL/8,sudo yum install gcc-c++ 对我来说有效。 - dan
显示剩余3条评论

103

在 CentOS 或 Fedora 上

yum install gcc-c++ 

74

在 Debian / Ubuntu 上,我通过重新安装 build-essential 解决了这个问题:

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

1
在“--reinstall build-essential”的日志中,我的Ubuntu明确指出: “正在设置g++(4:6.1.1-1ubuntu2)... update-alternatives:使用/usr/bin/g++来提供自动模式下的/usr/bin/c++(c++)” - Paamand
这在Debian DigitalOcean.com droplet上解决了我的问题。我只需要运行显示的第二个命令,之后gcc完美地编译了我的.cpp文件。 - raddevus
1
@mchid 没有问题 - 它解决了问题。只是想澄清你的建议中哪一部分与问题相关。例如,如果你的答案对某人无效,他们可以使用特定于gcc的update-alternative。 - Paamand

29

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

在shell命令行中键入whereis cc1。如果找到cc1,最好在gcc的目录中创建一个软链接;否则,cc1未安装,您需要使用软件包管理器安装gcc-c++


5
感谢回复。 whereis cc1 没有返回任何结果。 根据软件管理器,我已经安装了 gcc、gcc-4.4、gcc-4-6 和 libgcc1。我刚刚安装了 g++,但仍然出现错误。 - Scooter
2
检查可执行文件是否存在于 /usr/local/libexec/gcc/<architecture>/<compiler>/<compiler_version>/cc1,否则为临时使用导航至 /usr/bin 并通过 ln -s cc cc1 创建链接。 - perilbrain
1
GCC位于/usr/bin目录下,你也可以在那里找到cc。请在该目录下执行前面评论中提到的命令。 - perilbrain
安装gcc-c++的提示让我在一天的挫折后重新开始了! - vpipkt
3
cc1/cc1plus二进制文件不应该出现在$PATH中。 - zwol
显示剩余5条评论

19
亚马逊Linux:修复GCC问题
由于这在谷歌上排名第一,我想记录一下我在亚马逊Linux上的经验。安装gcc-c++.noarch解决了这个问题: sudo yum install gcc-c++.noarch 有些人还报告了另一种解决方案(@CoderChris): sudo yum install gcc72-c++ 其他人报告先执行sudo yum install gcc,然后再执行sudo yum install gcc-c++(@Wilmer E. Henao, @Talha Anwar)。

3
这明显是我的亚马逊 Linux 的问题,但不幸的是,.noarch 已经安装了。 - interestedparty333
12
在Amazon Linux上,执行 "sudo yum install gcc72-c++" 命令为我解决了问题。 - CoderChris
2
很高兴有人谈论Amazon Linux,但这两个解决方案都对我无效... - John Chrysostom
2
sudo yum install gcc72-c++ 对我有用。非常感谢。 - Ilyas
2
请尝试使用 yum install gcc-c++ 再次安装。 - jtlz2
显示剩余2条评论

15

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

sudo apt-get install g++

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


14
我今天遇到了类似的问题——我的同事无法构建他的软件,但我可以构建。当他运行gcc时,它找不到cc1
他的可执行路径看起来正常,但我无法轻松地复制失败,这表明他的环境中有一些问题。
最终,我们发现他的环境变量定义了GCC_EXEC_PREFIX,这是罪魁祸首,并误导了gcc在寻找cc1。这是他的shell启动脚本的一部分,旨在解决一个不再使用的SPARC/Solaris系统上的限制。通过不设置这个环境变量来解决了这个问题。

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


完全相同的问题..仍未解决! 这是在将项目从16.04LTS迁移到18.04LTS后发生的。 - Shaze

9

yum install gcc-c++ 已经修复了问题。


1
现有的答案已经回答了您的问题,重复回答只会增加垃圾信息。请不要发表“感谢”或“我也是”的回复。 - Peter Cordes

5

请确保您的GCC_EXEC_PREFIX(env)未被导出,同时您的PATH已经导出到正确的工具链中。


4

以下是我为Amazon Linux提供的解决方案 - 适用于2021年:

sudo yum install gcc

然后:
sudo yum install gcc-c++

这对我在 AWS Lambda 中有所帮助。 - Talha Anwar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接