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

Gcc error: gcc: error trying to exec 'cc1': execvp: No such file or directory

我已经在Linux Mint 12上成功使用gcc。现在出现错误。 我最近一直在进行一些.so编译并安装了Clang,但是自从这两个事件以来,它们都已成功编译,因此不确定发生了什么变化。 我使用GUI软件管理器删除并再次安装gcc,但结果是相同的:

1
2
3
4
5

~/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

 相关讨论

  • 可能重复的gcc:尝试执行cc1时出错:execvp:无此类文件或目录在php中使用popen编译程序时


说明

错误消息告诉我们,找不到构建时依赖项(在本例中为cc1),因此我们所需要的-将适当的软件包安装到系统中(使用软件包管理器//从源// // )

什么是cc1:

cc1 is the internal command which takes preprocessed C-language files and converts them to assembly. It's the actual part that compiles C. For C++, there's cc1plus, and other internal commands for different languages.

摘自艾伦·舒特科(Alan Shutko)的回答。

解决方案:Ubuntu / Linux Mint

1
2

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

解决方案:Docker-alpine环境

如果您在docker-alpine环境中,请通过将构建基础软件包添加到您的Dockerfile中来进行安装:

1

RUN apk add build-base

Pablo Castellano提供了更好的包装名称。此处有更多详细信息。

如果您需要更多软件包来进行构建,请考虑添加alpine-sdk软件包:

1

RUN apk add alpine-sdk

取自github

解决方案:CentOS / Fedora

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

解决方案:Amazon Linux

1

sudo yum install gcc72-c++

摘自CoderChris的评论

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

1

sudo yum install gcc-c++.noarch

取自这个答案


在CentOS或Fedora上

1

yum install gcc-c++


在debian / ubuntu上,我通过重新安装build-essential来解决此问题:

1
2

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

 相关讨论

  • 在--reinstall build-essential的日志中,我的ubuntu特别指出"设置g ++(4:6.1.1-1ubuntu2)... update-alternatives:使用/ usr / bin / g ++提供/ usr / bin / c ++ (c ++)在自动模式下"
  • 这将我固定在Debian DigitalOcean.com上。我只需要运行显示的第二条命令,然后在由.cpp文件完美编译的gcc之后。
  • @mchid没问题-它解决了问题。只是想澄清您的建议中与该问题有关的部分。例如。如果您的答案不适用于某人,则可以使用特定于gcc的update-alternative。


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

在外壳上键入whereis cc1。如果找到cc1,最好继续在gcc目录中创建一个软链接;否则,请执行以下操作。否则,未安装cc1,您必须使用程序包管理器安装gcc-c ++。

 相关讨论

  • 谢谢回复。哪里cc1不返回任何内容。我已经根据软件管理器安装了gcc和gcc-4.4,gcc-4-6,libgcc1。我只是安装g ++,但仍然出现错误。
  • 查看可执行文件是否在/ usr / local / libexec / gcc // / / cc1中,否则临时使用请导航至/ usr / bin并按ln -s cc cc1创建链接
  • 我没有/ usr / local / libexec目录。在/ usr / local下找不到" gcc"。
  • GCC在/ usr / bin下,您也将在cc下执行该目录中前面注释中提到的命令。
  • 我确实找到了:/usr/lib/gcc/x86_64-linux-gnu/4.6/cc1 /usr/lib/gcc/x86_64-linux-gnu/4.4/cc1
  • 我将以上内容添加到路径中,gcc现在显示" gcc:致命错误:-fuse-linker-plugin,但liblto_plugin.so找不到编译终止。"
  • 我不知道这是怎么发生的。我想删除gcc并重新安装,但是从软件管理器中执行"删除"和"安装"也遇到了同样的问题。经过数月的正常使用,我刚刚得到的一个?
  • 在经历了一天的挫折之后,安装gcc-c++的技巧使我再次感动!
  • cc1 / cc1plus二进制文件不应位于$ PATH中。
  • 谢谢!此解决方案是Amazon Linux用户需要的解决方案-仅作为未来访客的注意事项!


Amazon Linux: fixing GCC issue

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

sudo yum install gcc-c++.noarch

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

sudo yum install gcc72-c++

 相关讨论

  • 绝对是我在Amazon Linux上的问题,但可惜,已经安装了.noarch。
  • sudo yum install gcc72-c ++在Amazon Linux上为我排序了
  • 很高兴有人在谈论Amazon Linux,但是这些解决方案都不适合我...
  • 在" Amazon Linux AMI 2018.03"上,我也需要安装gcc72-c ++。
  • sudo yum install gcc72-c ++对我有用。非常感谢


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

他的可执行路径看起来很合理,但是我无法轻松复制故障这一事实表明,他的环境中有某种原因。

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

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

 相关讨论

  • 完全一样的问题..仍然没有解决!在将项目从16.04LTS移植到18.04LTS之后发生了这种情况。


我通过显式安装g ++来解决此问题:

1

sudo apt-get install g++

在安装熊猫时,在Ubuntu 12.04上遇到了问题。 (感谢peribrarain。)


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

 相关讨论

  • 现有答案的副本(当前投票最高的答案,在此答案之前一年发布)。"谢谢"或"我也是"的答案很混乱。


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


在RHEL 7上编译并安装了闪亮的新GCC(版本8.1)后,我很快就遇到了这种情况。最后,它最终成为权限问题;我的根本原因是罪魁祸首。我最终发现cc1隐藏在/usr/local/libexec中:

1
2

[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

但是,通往该目录的目录的权限不允许我的标准用户帐户:

1
2
3
4
5
6
7
8
9

[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可以添加世界的读/执行权限,从而立即对其进行了修复:

1
2
3
4
5
6

[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

现在,当我要求cc1进行编译时,它可以找到cc1!


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

解:

我为PATH='/usr/path/:$PATH'的单个会话添加了" / usr / bin"到PATH的开头,一切开始正常运行。

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

说明:

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


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

1

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


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


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

与Albian中Debian的build-essential等效为build-base。实际上,上述alpine-sdk取决于build-base。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

/ # 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 27上安装时遇到了这个问题。我尝试了所有其他建议或它们的等效建议。安装各种软件包时,要么说"已经安装",要么安装了没有帮助的新东西。

固定于

1
2

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


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

如何解决这个错误?
您需要做的就是通过软件包管理器更新软件包,然后重新安装必需的软件包。
在不同的内核上,命令可能不同。


在此软件包中(Ubuntu 19.04):

1

  sudo apt install g++-6

 相关讨论

  • 您不需要安装旧的G ++版本;只需g++就可以了。或者更好的是,build-essential也引入了一些库。


在Scientific Linux 6上(类似于CentOS 6-SL现在已由CentOS,AIUI取代),我不得不使用/usr/sbin/prelink -av -mR,我在https://stelfox.net/blog/2014/08/dependency-prelink中发现了此建议-问题/

在执行此操作之前,尝试进行编译时遇到了cc1错误gcc: error trying to exec 'cc1': execvp: No such file or directory,尽管yum报告了该版本,但gcc --version报告的是4.2.2而不是4.4.7。

它可能相关,也可能不相关,但是系统在/ var上空间不足


您可以通过运行以下命令解决此问题:
在Fedora上:

1

sudo dnf install redhat-rpm-config


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

你可能感兴趣的:(c语言,开发语言)