Erreur de compilation: «g ++: erreur lors de la tentative d’exécution de« cc1plus »: execvp: aucun fichier ou répertoire de ce type»


95

Lorsque je compile un programme C / C ++ avec popenin php... j'ai cette erreur:

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

mais si j'exécute du 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
Avez-vous essayé d'imprimer des variables d'environnement et de les comparer? Avez-vous activé ou désactivé le mode sans échec?
Vyktor le

oui .. J'ai comparé les variables d'environnement entre php et shell ... mais il n'a aucune aide ... et mon mode sans échec est désactivé ..
Zeyi Fan

Utilisez-vous le même utilisateur ou exécutez-vous un script à partir du serveur Web? Ajoutez "-v" (devrait être une sortie verbeuse), il y aura peut-être une réponse.
Vyktor le

ok .. je viens de tester pour compiler le code C ++ et exécuter en php xx.phptant httpqu'utilisateur. tous sont un succès ... et la sortie du g++ -vcode en php est similaire avec son en shell ..
Zeyi Fan

1
gcc -print-search-dirsque dis-tu de ça? Les sorties sont-elles les mêmes ?
Vyktor le

Réponses:


120

Vous devez installer le gcc-c++package.

yum install gcc-c++

27
pour alpin, c'étaitapk add g++
shadi

45

Je ne sais pas pourquoi mais je viens de renommer mon fichier source COLARR.C en colarr.c et l'erreur a disparu! tu en as probablement besoin

sudo apt-get install g++

2
Notez que l' .Cextension majuscule est l'une des nombreuses conventions pour la source C ++ - .cppet il en .ccexiste deux autres. La .Cconvention des majuscules interagit mal avec les systèmes de fichiers insensibles à la casse (Windows, macOS, par exemple). Quand vous aviez COLARR.C, le système le regardait probablement comme un fichier source C ++; car colarr.c, il s'agit d'un fichier source C.
Jonathan Leffler

23

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

   g++ --version
   gcc --version

Si ceux-ci ne donnent pas le résultat, 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é symboliquement à / etc / alternatives / gcc qui est à nouveau lié symboliquement à /usr/bin/gcc-4.6 ou /usr/bin/gcc-4.8 (au cas où vous auriez gcc-4.6, gcc-4.8 installés.)

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


Cela ne résout pas le problème, je n'ai pas trouvé de moyen de modifier ces liens.
Brana

Cela a fonctionné, et l'erreur disparaît après avoir modifié le lien logiciel de / etc / alternatives / gcc de / usr / bin / gcc72 vers / usr / bin / gcc48 avec ln -fs / usr / bin / gcc48 / etc / alternatives / gcc .
buxizhizhoum

7

Chaque compilateur a 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 doit 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'. Cela indique normalement un problème PATH.


J'ai eu le même problème avec mon environnement PATH lorsque j'ai couru, strace g++ [args]j'ai découvert qu'il essayait le mauvais dossier dans le chemin, puis abandonnait.
sirbrialliance

2

J'ai eu le même problème en forçant avec «python»; la raison principale est que le chemin de recherche est relatif, si vous n'appelez pas en g++tant que /usr/bin/g++, il ne pourra pas trouver les chemins canoniques à appeler cc1plus.


0

J'ai eu le même problème avec gcc "gnat1" et c'était dû à un chemin erroné. Gnat1 était sur la version 4.6 mais j'exécutais la version 4.8.1, que j'avais installée. Comme solution temporaire, j'ai copié gnat1 à partir de 4.6 et collé sous le dossier 4.8.1.

Le chemin de gcc sur mon ordinateur est / usr / lib / gcc / i686-linux-gnu /

Vous pouvez trouver le chemin en utilisant la commande find:

find /usr -name "gnat1"

Dans votre cas, vous recherchez cc1plus:

find /usr -name "cc1plus"

Bien sûr, c'est une solution rapide et une réponse plus solide serait de réparer le chemin cassé.



0

Un problème est survenu avec votre installation GCC . Essayez de le réinstaller comme ceci:

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

Dans Ubuntu, il g++s'agit d'un package de dépendances qui installe la version par défaut de g++pour la version de votre système d'exploitation. Donc, simplement supprimer et réinstaller le package ne fonctionnera pas, car il installera la version par défaut. C'est pourquoi vous devez réinstaller.

Remarque: vous pouvez remplacer le g++-5par la g++version souhaitée . Pour trouver votre g++version actuelle , exécutez ceci:

g++ --version

0

Vous pouvez également avoir ce problème si vous avez la variable d'environnement GCC_ROOT pointant vers un mauvais emplacement. La solution la plus simple pourrait probablement être (sur un système similaire à * nix):

unset GCC_ROOT

dans les cas plus compliqués, vous devrez peut-être le rejoindre au bon endroit

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.