web-dev-qa-db-ja.com

コンパイルエラー:「g ++: 'cc1plus'を実行しようとしてエラー:execvp:そのようなファイルまたはディレクトリはありません」

popenphpを指定して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;
?>

ありがとう

77
Zeyi Fan

gcc-c++パッケージをインストールする必要があります。

yum install gcc-c++
101
hahakubile

理由はわかりませんが、ソースファイルCOLARR.Cの名前をcolarr.cに変更しただけで、エラーはなくなりました。おそらくあなたはこれが必要です

Sudo apt-get install g++
37
Sunil Kumar

この問題は、異なるバージョンの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 ++を同じバージョンで実行でき、問題が解決する場合があります!

16
pulkitag

各コンパイラには、独自のlibexec /ディレクトリがあります。通常、libexecディレクトリには、他のプログラムによって呼び出される小さなヘルパープログラムが含まれています。この場合、gccは独自の「cc1」コンパイラーを探しています。マシンにはgccの異なるバージョンが含まれている場合があり、各バージョンには独自の「cc1」が必要です。通常、これらのコンパイラは次の場所にあります。


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

G ++の同様のパス。上記のエラーは、使用されている現在のgccバージョンが独自の 'cc1'コンパイラを見つけられないことを意味します。これは通常、PATHの問題を指します。

7
Freddy

'python'でforkするときに同じ問題がありました。主な理由は、検索パスが相対であるためです。g++/usr/bin/g++として呼び出さない場合、cc1plusを呼び出すための標準パスを解決できません。

2
vliu

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"

もちろん、これは迅速な解決策であり、より確実な答えは壊れたパスを修正することです。

0
rtrigoso

OpenSuSEの実行時にg ++をインストールする

zypper in gcc-c++
0
David Hamner