编译错误:“g++:尝试执行 'cc1plus' 时出错:execvp:没有这样的文件或目录”

Posted

技术标签:

【中文标题】编译错误:“g++:尝试执行 \'cc1plus\' 时出错:execvp:没有这样的文件或目录”【英文标题】:Compile error: "g++: error trying to exec 'cc1plus': execvp: No such file or directory"编译错误:“g++:尝试执行 'cc1plus' 时出错:execvp:没有这样的文件或目录” 【发布时间】:2012-02-11 07:34:15 【问题描述】:

当我在php 中使用popen 编译C/C++ 程序时...我得到了这个错误:

g++: error trying to exec 'cc1plus': execvp: No such file or directory

但如果我在 shell 中运行 php 代码.. 它工作正常..

在 Arch Linux 中..

PHP 代码:

<?php
    function rfile($fp) 
    $out="";
       while (!feof($fp)) 
           $out.= fgets($fp, 1024000);
       
       return $out;
    
    $p = popen('g++ -Wall -g aplusb.cc -o aplusb 2>&1', 'r');
    $result = rfile($p);
    pclose($p);
    echo $result;
?>

谢谢

【问题讨论】:

您是否尝试过打印环境变量并进行比较?您是否开启或关闭了安全模式? 是的..我比较了 php 和 shell 之间的环境变量......但它没有任何帮助......而且我的安全模式是关闭.. 您是在使用同一个用户还是从 Web 服务器执行脚本?加上“-v”(应该是详细输出),说不定会有答案。 ok.. 我刚刚测试编译 C++ 代码并以http 用户身份运行php xx.php。所有这些都是成功的......并且g++ -v在php代码中的输出与它在shell中的输出相似...... gcc -print-search-dirs 这个怎么样?输出是否相同 【参考方案1】:

每个编译器都有自己的 libexec/ 目录。通常 libexec 目录包含由其他程序调用的小帮助程序。在这种情况下,gcc 正在寻找自己的 'cc1' 编译器。你的机器可能包含不同版本的 gcc,每个版本都应该有自己的 'cc1'。通常这些编译器位于:


/usr/local/libexec/gcc/<architecture>/<compiler>/<compiler_version>/cc1

g++ 的类似路径。上面的错误意味着当前使用的 gcc 版本无法找到它自己的 'cc1' 编译器。这通常表明存在 PATH 问题。

【讨论】:

当我运行 strace g++ [args] 时,我的 PATH 环境遇到了同样的问题,我发现它尝试了路径中的错误文件夹然后放弃了。【参考方案2】:

我在 gcc "gnat1" 上遇到了同样的问题,这是由于路径错误。 Gnat1 在 4.6 版上,但我正在执行我已经安装的 4.8.1 版。作为临时解决方案,我从 4.6 复制了 gnat1 并粘贴在 4.8.1 文件夹下。

我电脑上gcc的路径是/usr/lib/gcc/i686-linux-gnu/

您可以使用 find 命令找到路径:

find /usr -name "gnat1"

在你的情况下,你会寻找 cc1plus:

find /usr -name "cc1plus"

当然,这是一个快速的解决方案,更可靠的答案是修复损坏的路径。

【讨论】:

【参考方案3】:

你需要安装gcc-c++包。

yum install gcc-c++

【讨论】:

对于 alpine,这是apk add g++ 对于 Ubuntu,这是apt install g++【参考方案4】:

我不知道为什么,但我只是将源文件 COLARR.C 重命名为 colarr.c 并且错误消失了! 可能你需要这个

sudo apt-get install g++

【讨论】:

请注意,大写的 .C 扩展名是 C++ 源代码的众多约定之一——.cpp.cc 是另外两个。大写的.C 约定与不区分大小写的文件系统(例如Windows、macOS)的交互很糟糕。当您拥有COLARR.C 时,系统可能将其视为 C++ 源文件;如colarr.c,它是一个C源文件。【参考方案5】:

如果安装了不同版本的 g++ 和 gcc,就会出现这个问题。

   g++ --version
   gcc --version

如果这些没有给出结果,您可能安装了多个版本的 gcc。您可以通过以下方式检查:

    dpkg -l | grep gcc | awk 'print $2'

通常,/usr/bin/gcc 将符号链接到 /etc/alternatives/gcc,后者又符号链接到 /usr/bin/gcc-4.6 或 /usr/bin/gcc-4.8(在如果您安装了 gcc-4.6、gcc-4.8。)

通过更改此链接,您可以使 gcc 和 g++ 在同一版本中运行,这可能会解决您的问题!

【讨论】:

这并没有解决问题,我没有找到改变这些链接的方法。 它有效,并且在我使用 ln -fs /usr/bin 将 /etc/alternatives/gcc 的软链接从 /usr/bin/gcc72 修改为 /usr/bin/gcc48 后,错误消失了/gcc48 /etc/alternatives/gcc. 这是我的情况。我安装了新版本的 gcc 并对 gcc 二进制文件进行了符号链接,但也忘记了对 g++ 二进制文件进行符号链接。只需确保 gcc -vg++ -v 显示相同的版本即可。【参考方案6】:

我在使用“python”分叉时遇到了同样的问题;主要原因是搜索路径是相对的,如果不将g++称为/usr/bin/g++,将无法计算出调用cc1plus的规范路径。

【讨论】:

【参考方案7】:

安装 g++ 在 openSuSE 上运行

zypper in gcc-c++

【讨论】:

【参考方案8】:

您的GCC 安装出现问题。尝试像这样重新安装它:

sudo apt-get install --reinstall g++-5

在 Ubuntu 中,g++ 是一个依赖包,它为您的操作系统版本安装默认版本的g++。所以简单地删除并再次安装包是行不通的,因为它将安装默认版本。这就是您需要重新安装的原因。

注意:您可以将 g++-5 替换为您想要的 g++ 版本。要查找您当前的g++ 版本,请运行以下命令:

g++ --version

【讨论】:

【参考方案9】:

如果您的环境变量 GCC_ROOT 指向错误的位置,您也可能会遇到此问题。可能最简单的修复可能是(在 *nix 之类的系统上):

unset GCC_ROOT

在更复杂的情况下,您可能需要将其重新指向正确的位置

【讨论】:

【参考方案10】:

对于 apk,最简单的方法是:

apk add build-base

【讨论】:

以上是关于编译错误:“g++:尝试执行 'cc1plus' 时出错:execvp:没有这样的文件或目录”的主要内容,如果未能解决你的问题,请参考以下文章

Arduino编译错误

我要完整的DELPHI编译错误信息。

SOPC 中NIOSII IDE编译工程时错误!!

C++编译链接错误

c语言 编译错误

java web 编译时出现错误