Gcc错误:gcc:尝试执行'cc1'时出错:execvp:没有这样的文件或目录

时间:2012-08-11 07:26:41

标签: gcc

我已成功在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

21 个答案:

答案 0 :(得分:55)

在CentOS或Fedora上

yum install gcc-c++ 

答案 1 :(得分:52)

在debian / ubuntu上我通过重新安装build-essential修复了这个问题:

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

答案 2 :(得分:24)

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

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

答案 3 :(得分:23)

1。解释

错误消息告诉您,找不到构建时依赖关系,因此您需要 - 将适当的软件包安装到您的系统中(使用软件包管理器,从源代码构建或以其他方式构建)

什么是cc1

  

sudo apt-get install --reinstall build-essential 是内部命令,它接受预处理的C语言文件并将它们转换为程序集。这是编译C的实际部分。对于C ++,有cc1plus,以及其他用于不同语言的内部命令。

taken from this answer

Alan Shutko

2。溶液

Ubuntu / Linux Mint

RUN apk add build-base

Docker-alpine环境

如果您在 docker-alpine 环境中,请通过添加以下内容安装build-base

Dockerfile

<div id="checkDiv"> <span mdTooltipPosition="below" mdTooltip="CheckIn"> <md-icon svgIcon="play" style="color: #efefef;cursor: pointer;height: 15px;width: 15px;" (click)='openPause()' [hidden]='playDiv'></md-icon> </span> <span mdTooltipPosition="below" mdTooltip="pause"> <md-icon svgIcon="pause" style="color: #efefef;cursor: pointer;height: 15px;width: 15px;" *ngIf="playDiv" (click)='openPlay()' > </md-icon> </span> <span mdTooltipPosition="below" mdTooltip="resume"> <md-icon svgIcon="play" style="color: #efefef;cursor: pointer;height: 15px;width: 15px;" *ngIf="playDiv" [hidden]='playDiv' (click)='openPause()' ></md-icon> </span> <span mdTooltipPosition="below" mdTooltip="CheckOut"> <md-icon svgIcon="stop" style="color: #efefef;cursor: pointer;height: 15px;width: 15px;" *ngIf="playDiv" (click)='openPlay()'></md-icon> </span> 。如果您需要更多包用于构建目的,请考虑添加alpine-sdk包。

取自github

答案 4 :(得分:13)

  

Amazon Linux:修复GCC问题

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

sudo yum install gcc-c++.noarch

有些人还报告了这种替代方案:

sudo yum install gcc72-c++

答案 5 :(得分:10)

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

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

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

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

答案 6 :(得分:9)

我通过显式安装g ++修复了这个问题:

sudo apt-get install g++

安装pandas时遇到Ubuntu 12.04的问题。 (谢谢perilbrain。)

答案 7 :(得分:6)

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

答案 8 :(得分:3)

确保未导出GCC_EXEC_PREFIX(env),并将PATH导出到正确的工具链。

答案 9 :(得分:1)

对我有用的是使用llvm-gcc代替:

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

答案 10 :(得分:1)

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

答案 11 :(得分:1)

只是为了记录我对这个问题的麻烦,尽管它似乎只是其他答案的一个具体例子;作为一个相对新手,我觉得这可能会帮助别人。

解决方案:

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

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

说明:

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

答案 12 :(得分:1)

在RHEL 7上编译并安装了闪亮的新GCC(版本8.1)后,我很快就遇到了这种情况。最后,它最终成为权限问题;我的根本原因是罪魁祸首。我最终发现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进行编译时找到它!

答案 13 :(得分:0)

您可以通过运行此操作来解决此问题: 在Fedora上:

sudo dnf install redhat-rpm-config

答案 14 :(得分:0)

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

已修复

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

答案 15 :(得分:0)

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

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

它可能相关也可能不相关,但系统在/ var

上的空间不足

答案 16 :(得分:0)

只是补充@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

答案 17 :(得分:0)

在此包装中(Ubuntu 19.04):

  sudo apt install g++-6

答案 18 :(得分:0)

在我极少数情况下,open宠坏了color wrapper。通过禁用gcc环境变量将cw从其目录/usr/libexec/cw中排除来解决。

答案 19 :(得分:0)

为什么会这样? 当您安装Linux的新副本时,gcc编译器将随其预装。它仅包含用于运行linux的文件和二进制文件(显然可以节省空间和时间)。

如何解决此错误? 您需要做的就是通过软件包管理器更新软件包,然后重新安装基本构建软件包。 在不同的内核上,命令可能会有所不同。

答案 20 :(得分:0)

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

运行 sudo make install 并测试 gcc-10 后,我收到此错误:

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

原因是 /usr/local/ 下的新 g++ 目录是由 sudo make install 创建的,具有 700 权限,因此非 root 用户无法看到目录内容。

我通过运行修复了它

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

请注意,我遵循了此代码段 https://gist.github.com/nchaigne/ad06bc867f911a3c0d32939f1e930a11