2012-01-16 27 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++ 
相關問題