117 votes

Erreur de compilation : "g++ : erreur en essayant d'exécuter 'cc1plus' : execvp : No such file or directory"

Lorsque je compile un programme C/C++ avec popen en php ... J'ai eu cette erreur :

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

mais si je lance le code php dans le shell cela fonctionne bien

dans Arch Linux..

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

merci

2 votes

Avez-vous essayé d'imprimer les variables d'environnement et de les comparer ? Le mode sans échec est-il activé ou désactivé ?

0 votes

Oui... j'ai comparé les variables d'environnement entre php et le shell ... mais cela ne m'a pas aidé... et mon mode sans échec est Off...

0 votes

Utilisez-vous le même utilisateur ou exécutez-vous script depuis le serveur web ? Ajoutez "-v" (devrait être une sortie verbeuse), peut-être y aura-t-il une réponse.

154voto

hahakubile Points 221

Vous devez installer gcc-c++ paquete.

yum install gcc-c++

60 votes

Pour alpine, c'était apk add g++

11 votes

Pour Ubuntu, c'était apt install g++

65voto

Sunil Sharma Points 53

Je ne sais pas pourquoi mais j'ai juste renommé mon fichier source COLARR.C en colarr.c et l'erreur a disparu ! Vous avez probablement besoin de ceci

sudo apt-get install g++

3 votes

Notez que les majuscules .C est l'une des nombreuses conventions relatives au code source C++. .cpp y .cc en sont deux autres. La majuscule .C interagit mal avec les systèmes de fichiers insensibles à la casse (Windows, macOS, par exemple). Lorsque vous aviez COLARR.C le système le considérait probablement comme un fichier source C++ ; comme colarr.c il s'agit d'un fichier source en C.

29voto

pulkitag Points 495

Ce problème peut se produire si différentes versions de g++ et gcc sont installées.

   g++ --version
   gcc --version

Si cela ne donne pas le résultat escompté, vous avez probablement plusieurs versions de gcc installées. Vous pouvez vérifier en utilisant :

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

Habituellement, /usr/bin/gcc sera lié par symétrie à /etc/alternatives/gcc qui est à nouveau lié par symétrie à /usr/bin/gcc-4.6 ou /usr/bin/gcc-4.8 (dans le cas où vous avez installé gcc-4.6 ou gcc-4.8).

En changeant ce lien, vous pouvez faire fonctionner gcc et g++ dans la même version et cela peut résoudre votre problème !

8voto

Freddy Points 1658

Chaque compilateur possède son propre répertoire libexec/. Normalement, le répertoire libexec contient de petits programmes d'aide appelés par d'autres programmes. Dans ce cas, gcc recherche son propre compilateur 'cc1'. Votre machine peut contenir différentes versions de gcc, et chaque version devrait avoir son propre 'cc1'. Normalement, ces compilateurs sont situés sur :

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

Chemin similaire pour g++. L'erreur ci-dessus signifie que la version actuelle de gcc utilisée n'est pas capable de trouver son propre compilateur 'cc1'. Ceci indique normalement un problème de PATH.

3voto

Myotha Points 46

Pour apk, le plus simple est :

apk add build-base

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X