2012-01-16 26 views
63

当我编译C/C++程序与phppopen ...我得到这个错误:编译错误: “G ++:错误试图给exec 'cc1plus':execvp:没有这样的文件或目录”

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

但如果我跑在外壳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; 
?> 

谢谢

+2

你试过打印ENV变量,并比较它们?你有没有安全模式? – Vyktor 2012-01-16 10:34:08

+0

是的..我比较了PHP和shell之间的env变量......但它没有任何帮助......而我的安全模式是关闭的。 – 2012-01-16 10:38:23

+0

您是使用相同的用户还是执行脚本从Web服务器?添加“-v”(应该是详细输出),也许会有答案。 – Vyktor 2012-01-16 10:43:14

回答

74

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

yum install gcc-c++ 
+3

for alpine,这是'apk add g ++' – shadi 2017-01-12 08:37:49

6

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


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

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

+0

当我运行'strace g ++ [args]'时,我遇到了与我的PATH环境相同的问题'我发现它正在尝试路径中的错误文件夹,然后放弃。 – sirbrialliance 2012-06-16 03:27:18

0

我有与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" 

当然,这是一个快速的解决方案,更确定的答案是修复破损的路径。

27

我不知道为什么,但我只是将我的源文件COLARR.C重命名为colarr.c,错误消失了! 可能需要如果安装了不同版本的克++和GCC会发生这种

sudo apt-get install g++ 
+0

请注意,大写'.C'扩展名是C++源代码的一个约定 - '.cpp'和'.cc'是另外两个。大写'.C'约定与不区分大小写的文件系统(例如Windows,macOS)交互严重。当你有'COLARR.C'时,系统可能将它视为一个C++源文件;作为'colarr.c',它是一个C源文件。 – 2016-12-09 18:13:06

12

此问题。

g++ --version 
    gcc --version 

如果这些不提供结果,您可能已安装多个版本的gcc。您可以通过使用检查:

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

通常是/ usr/bin中/ GCC将符号链接到/ etc /方案/ GCC这又是符号链接说/usr/bin/gcc-4.6或/usr/bin/gcc-4.8(如果你安装了gcc-4.6,gcc-4.8)

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

3

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

1

安装G ++ 在openSUSE运行

zypper in gcc-c++ 
相关问题