编译错误: “ 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;
?>

谢谢

197876 次浏览

每个编译器都有自己的 libexec/目录。通常,libexec 目录包含由其他程序调用的小型助手程序。在本例中,gcc 正在寻找自己的“ cc1”编译器。您的机器可能包含不同版本的 gcc,并且每个版本都应该有自己的“ cc1”。这些编译器通常位于:


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

G + + 的相似路径。以上错误意味着,当前使用的 gcc 版本无法找到自己的“ cc1”编译器。这通常指向 PATH 问题。

我在 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"

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

您需要安装 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/options/gcc 进行 sym 链接,后者同样与/usr/bin/gcc-4.6或/usr/bin/gcc-4.8进行 sym 链接(如果已经安装了 gcc-4.6,则安装 gcc-4.8)

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

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

安装 g + + 运行 openSuSE

zypper in gcc-c++

你的 海湾合作委员会安装出了问题。试着这样重新安装:

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

在 Ubuntu 中,g++是一个依赖包,它为你的操作系统版本安装了默认的 g++版本。因此,简单地删除和再次安装软件包将不起作用,因为它将安装默认版本。这就是为什么你需要重新安装。

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

g++ --version

如果环境变量的 gCC _ root 指向错误的位置,你也可能会遇到这个问题。最简单的补丁可能是(on * nix like system) :

unset GCC_ROOT

在更复杂的情况下,你可能需要将它重新指向适当的位置

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

apk add build-base