2012-01-16 19 views
63

Quando compilo programma C/C++ con popen in php ... ho ottenuto questo errore:errore di compilazione: "g ++: errore nel tentativo di exec 'cc1plus': execvp: No such file or directory"

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

ma se corro codice php in guscio .. funziona bene ..

in Arch Linux ..

codice

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; 
?> 

grazie

+2

Hai provato a stampare le variabili env e confrontarli? Hai attivato o disattivato la modalità provvisoria? – Vyktor

+0

sì .. Ho confrontato le variabili di env tra php e shell ... ma non ha alcun aiuto ... e la mia modalità sicura è Off. –

+0

Stai usando lo stesso utente o script di esecuzione dal server web? Aggiungi "-v" (dovrebbe essere un output prolisso), forse ci sarà una risposta. – Vyktor

risposta

74

È necessario installare il pacchetto gcc-c++.

yum install gcc-c++ 
+3

per Alpine, questo era 'apk add g ++' – shadi

6

Ogni compilatore ha la propria directory libexec /. Normalmente la directory libexec contiene piccoli programmi di supporto chiamati da altri programmi. In questo caso, gcc sta cercando il proprio compilatore 'cc1'. Il tuo computer potrebbe contenere diverse versioni di gcc e ogni versione dovrebbe avere il suo 'cc1'. Normalmente questi compilatori si trovano su:


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

Percorso simile per g ++. Sopra errore significa che la versione corrente di gcc utilizzata non è in grado di trovare il proprio compilatore 'cc1'. Questo normalmente indica un problema PATH.

+0

Ho avuto lo stesso problema con il mio ambiente PATH quando ho eseguito 'strace g ++ [args]' Ho scoperto che stava provando la cartella sbagliata nel percorso, rinunciando poi. – sirbrialliance

0

Ho avuto lo stesso problema con gcc "gnat1" ed era dovuto al fatto che il percorso fosse errato. Gnat1 era in versione 4.6 ma stavo eseguendo la versione 4.8.1, che avevo installato. Come soluzione temporanea, ho copiato gnat1 da 4.6 e incollato nella cartella 4.8.1.

Il percorso a GCC sul mio computer è/usr/lib/gcc/i686-linux-gnu/

È possibile trovare il percorso utilizzando il comando find:

find /usr -name "gnat1" 

Nel tuo caso si guarda per cc1plus:

find /usr -name "cc1plus" 

Naturalmente, questa è una soluzione rapida e una risposta più solida sarebbe che fissa il percorso rotto.

27

Non so perché, ma ho appena cambiato titolo la mia fonte di file COLARR.C al colarr.c e l'errore scomparso! probabilmente avete bisogno di questo

sudo apt-get install g++ 
+0

Nota che l'estensione '.C' maiuscola è una delle numerose convenzioni per il sorgente C++ -' .cpp' e '.cc' sono altre due. La convenzione in maiuscolo '.C' interagisce male con i file system senza distinzione tra maiuscole e minuscole (Windows, macOS, ad esempio). Quando avevi 'COLARR.C', il sistema probabilmente lo stava guardando come un file sorgente C++; come 'colarr.c', è un file sorgente C. –

12

Questo problema può verificarsi se sono installate diverse versioni di g ++ e gcc.

g++ --version 
    gcc --version 

Se questi non danno il risultato, probabilmente hanno più versioni di gcc installato. È possibile controllare tramite:

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

Di solito,/usr/bin/gcc sarà SYM-legato alla/etc/alternatives/gcc che è di nuovo SYM-linked dire /usr/bin/gcc-4.6 o /usr/bin/gcc-4.8 (Nel caso in cui si abbia gcc-4.6, gcc-4.8 installato.)

Cambiando questo collegamento è possibile eseguire gcc e g ++ nella stessa versione e questo potrebbe risolvere il problema!

3

Ho avuto lo stesso problema durante la forking con "python"; il motivo principale è che il percorso di ricerca è relativo, se non si chiama g++ come /usr/bin/g++, non sarà in grado di elaborare i percorsi canonici per chiamare cc1plus.

1

Installa g ++ su openSUSE eseguito

zypper in gcc-c++ 
Problemi correlati