我已经在Linux Mint 12上成功使用gcc。现在出现错误。 我最近一直在进行一些.so编译并安装了Clang,但是自从这两个事件以来,它们都已成功编译,因此不确定发生了什么变化。 我使用GUI软件管理器删除并再次安装gcc,但结果是相同的:
1 |
~/code/c/ut: which gcc |
相关讨论
说明
错误消息告诉我们,找不到构建时依赖项(在本例中为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 |
sudo apt-get update |
解决方案: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 |
sudo apt-get update |
相关讨论
这是因为gcc调用许多其他可执行文件来完成输入的处理,并且cc1不在包含的路径中。
在外壳上键入whereis cc1。如果找到cc1,最好继续在gcc目录中创建一个软链接;否则,请执行以下操作。否则,未安装cc1,您必须使用程序包管理器安装gcc-c ++。
相关讨论
Amazon Linux: fixing GCC issue
由于这是Google的第一个结果,因此我只想记录一下我在Amazon Linux上的经验。安装gcc-c++.noarch可以解决此问题:
sudo yum install gcc-c++.noarch
有些人还报告了此替代方案作为解决方案:
sudo yum install gcc72-c++
相关讨论
今天,我遇到了类似的问题-同事无法构建他的软件,但我可以构建它。当他运行gcc时,找不到cc1。
他的可执行路径看起来很合理,但是我无法轻松复制故障这一事实表明,他的环境中有某种原因。
最终,我们发现在他的环境中定义了GCC_EXEC_PREFIX,这是罪魁祸首,并且在搜索cc1时误导了gcc。这是他的shell启动脚本的一部分,旨在解决对不再使用的SPARC / Solaris系统的限制。通过不设置此环境变量解决了该问题。
http://gcc.gnu.org/onlinedocs/gcc/Environment-Variables.html
相关讨论
我通过显式安装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 |
[root@nacelle gdb-8.1]# ls -l /usr/local/libexec/gcc/x86_64-pc-linux-gnu/8.1.0/ | grep cc1 |
但是,通往该目录的目录的权限不允许我的标准用户帐户:
1 |
[root@nacelle gdb-8.1]# ls -l /usr/local/libexec/ |
一个快速递归的chmod可以添加世界的读/执行权限,从而立即对其进行了修复:
1 |
[root@nacelle 8.1.0]# cd /usr/local/libexec |
现在,当我要求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 |
/ # apk info -R build-base |
我在相当新鲜的Fedora 27上安装时遇到了这个问题。我尝试了所有其他建议或它们的等效建议。安装各种软件包时,要么说"已经安装",要么安装了没有帮助的新东西。
固定于
1 |
# dnf remove gcc |
为什么会这样?
当您安装Linux的新副本时,gcc编译器将随其预装。它仅包含用于运行linux的文件和二进制文件(显然可以节省空间和时间)。
如何解决这个错误?
您需要做的就是通过软件包管理器更新软件包,然后重新安装必需的软件包。
在不同的内核上,命令可能不同。
在此软件包中(Ubuntu 19.04):
1 |
sudo apt install g++-6 |
相关讨论
在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来解决。