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

当我用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; ?> 

谢谢

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

 yum install gcc-c++ 

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

 sudo apt-get install g++ 

如果安装了不同版本的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 ++运行在同一个版本,这可能会解决你的问题!

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

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

类似的pathg ++。 以上错误意味着,当前使用的gcc版本无法find自己的'cc1'编译器。 这通常指向PATH问题。

分叉“python”时,我遇到了同样的问题。 主要原因是searchpath是相对的,如果你不把g++称为/usr/bin/g++ ,那么它将无法计算出调用cc1plus的规范path。

在openSuSE上运行g ++

 zypper in gcc-c++ 

我有与gcc“gnat1”相同的问题,这是由于path错误。 Gnat1在4.6版本上,但是我正在执行我已经安装的4.8.1版本。 作为一个临时解决scheme,我从4.6复制gnat1并粘贴到4.8.1文件夹下。

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

您可以使用find命令findpath:

 find /usr -name "gnat1" 

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

 find /usr -name "cc1plus" 

当然,这是一个快速的解决scheme,更坚实的答案将是修复破损的path。