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


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

当我在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/gcs-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

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

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

apk add build-base

安装g++在openSuSE上运行

zypper in gcc-c++

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

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

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

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

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

g++ --version

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

unset GCC_ROOT

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

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

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

其中一些答案很神奇,但由于某种原因,它们在我的Ubuntu虚拟机上不起作用。在我的路径中添加/usr/lib/gcc/x86_64-linux-gnu/11(在我的例子中是11)在我的情况下是有效的。