Errore di compilazione: "g ++: errore durante il tentativo di eseguire" cc1plus ": execvp: nessun file o directory di questo tipo"


95

Quando compilo il programma C / C ++ con popenin php... ho ricevuto questo errore:

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

ma se eseguo il codice php nella shell .. 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 confrontarle? Hai attivato o disattivato la modalità provvisoria?
Vyktor

sì .. ho confrontato le variabili env tra php e shell ... ma non ho alcun aiuto ... e la mia modalità provvisoria è Off ..
Zeyi Fan

Stai utilizzando lo stesso utente o stai eseguendo uno script dal server web? Aggiungi "-v" (dovrebbe essere un output dettagliato), forse ci sarà una risposta.
Vyktor

ok .. ho appena provato a compilare codice C ++ ed eseguire php xx.phpcome httputente. tutti hanno successo ... e l'output del g++ -vcodice php è simile a quello della shell ..
Zeyi Fan

1
gcc -print-search-dirscosa ne pensi di questo? Le uscite sono le stesse ?
Vyktor

Risposte:


120

Devi installare il gcc-c++pacchetto.

yum install gcc-c++

27
per alpine, questo eraapk add g++
shadi

45

Non so perché, ma ho appena rinominato il mio file sorgente COLARR.C in colarr.c e l'errore è scomparso! probabilmente ne hai bisogno

sudo apt-get install g++

2
Si noti che l' .Cestensione in maiuscolo è una delle numerose convenzioni per i sorgenti C ++ .cppe .ccsono altre due. La .Cconvenzione delle maiuscole interagisce male con i file system senza distinzione tra maiuscole e minuscole (Windows, macOS, ad esempio). Quando l'hai fatto COLARR.C, il sistema probabilmente lo stava guardando come un file sorgente C ++; come colarr.c, è un file sorgente C.
Jonathan Leffler

23

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

   g++ --version
   gcc --version

Se questi non danno il risultato, probabilmente hai più versioni di gcc installate. Puoi controllare utilizzando:

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

Di solito, / usr / bin / gcc sarà collegato simbolicamente a / etc / alternatives / gcc che è di nuovo collegato simbolicamente a /usr/bin/gcc-4.6 o /usr/bin/gcc-4.8 (nel caso in cui tu abbia gcc-4.6, gcc-4.8 installato.)

Modificando questo collegamento puoi far funzionare gcc e g ++ nella stessa versione e questo potrebbe risolvere il tuo problema!


Questo non risolve il problema, non ho trovato un modo per modificare questi collegamenti.
Brana

Ha funzionato e l'errore scompare dopo aver modificato il collegamento software di / etc / alternatives / gcc da / usr / bin / gcc72 a / usr / bin / gcc48 con ln -fs / usr / bin / gcc48 / etc / alternatives / gcc .
buxizhizhoum

7

Ogni compilatore ha la propria directory libexec /. Normalmente la directory libexec contiene piccoli programmi di aiuto chiamati da altri programmi. In questo caso, gcc sta cercando il proprio compilatore "cc1". La tua macchina potrebbe contenere diverse versioni di gcc e ogni versione dovrebbe avere il proprio "cc1". Normalmente questi compilatori si trovano su:


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

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


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 e poi si è arreso.
sirbrialliance

2

Ho avuto lo stesso problema durante il fork con "python"; la ragione principale è che il percorso di ricerca è relativo, se non chiami g++as /usr/bin/g++, non sarà in grado di elaborare i percorsi canonici da chiamare cc1plus.


0

Ho avuto lo stesso problema con gcc "gnat1" ed era dovuto al percorso sbagliato. Gnat1 era sulla 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 per gcc sul mio computer è / usr / lib / gcc / i686-linux-gnu /

Puoi trovare il percorso utilizzando il comando find:

find /usr -name "gnat1"

Nel tuo caso cercheresti cc1plus:

find /usr -name "cc1plus"

Naturalmente, questa è una soluzione rapida e una risposta più solida sarebbe riparare il percorso interrotto.



0

Qualcosa è andato storto con l' installazione di GCC . Prova a reinstallarlo in questo modo:

sudo apt-get install --reinstall g++-5

In Ubuntu g++è un pacchetto di dipendenze che installa la versione predefinita di g++per la versione del sistema operativo. Quindi la semplice rimozione e installazione di nuovo del pacchetto non funzionerà, poiché installerà la versione predefinita. Ecco perché devi reinstallare.

Nota: è possibile sostituire il g++-5con la g++versione desiderata . Per trovare la tua g++versione attuale , esegui questo:

g++ --version

0

Potresti avere questo problema anche se la variabile d'ambiente GCC_ROOT punta a una posizione sbagliata. Probabilmente la soluzione più semplice potrebbe essere (su * nix come sistema):

unset GCC_ROOT

in casi più complicati potrebbe essere necessario riporlo nella posizione corretta

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.