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

Zey*_*Fan 82 php c c++ linux gcc

当我用... 编译C/C++程序时popen,php我收到此错误:

g++: error trying to exec 'cc1plus': execvp: No such file or directory
Run Code Online (Sandbox Code Playgroud)

但如果我在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;
?>
Run Code Online (Sandbox Code Playgroud)

谢谢

hah*_*ile 103

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

yum install gcc-c++
Run Code Online (Sandbox Code Playgroud)

  • 对于高山,这是`apk add g ++` (17认同)
  • 对于 Ubuntu,这是“apt install g++” (4认同)

Sun*_*mar 39

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

sudo apt-get install g++
Run Code Online (Sandbox Code Playgroud)

  • 请注意,大写的`.C`扩展名是C ++源代码的许多约定之一-`.cpp`和`.cc`是另外两个约定。大写的`.C`约定与不区分大小写的文件系统(例如Windows,macOS)交互不良。当您拥有COLARR.C时,系统可能会将其视为C ++源文件。作为`colarr.c`,它是一个C源文件。 (2认同)

pul*_*tag 19

如果安装了不同版本的g ++和gcc,则可能会发生此问题.

   g++ --version
   gcc --version
Run Code Online (Sandbox Code Playgroud)

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

    dpkg -l | grep gcc | awk '{print $2}'
Run Code Online (Sandbox Code Playgroud)

通常,/ usr/bin/gcc将被sym链接到/ etc/alternatives/gcc,它再次被sym链接到/usr/bin/gcc-4.6或/usr/bin/gcc-4.8(如果你有安装gcc-4.6,gcc-4.8.)

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


Fre*_*ddy 7

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


/usr/local/libexec/gcc/<architecture>/<compiler>/<compiler_version>/cc1
Run Code Online (Sandbox Code Playgroud)

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