Lorsque je compile un programme C / C ++ avec popen
in 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
php xx.php
tanthttp
qu'utilisateur. tous sont un succès ... et la sortie dug++ -v
code en php est similaire avec son en shell ..gcc -print-search-dirs
que dis-tu de ça? Les sorties sont-elles les mêmes ?Réponses:
Vous devez installer le
gcc-c++
package.la source
apk add g++
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
la source
.C
extension majuscule est l'une des nombreuses conventions pour la source C ++ -.cpp
et il en.cc
existe deux autres. La.C
convention des majuscules interagit mal avec les systèmes de fichiers insensibles à la casse (Windows, macOS, par exemple). Quand vous aviezCOLARR.C
, le système le regardait probablement comme un fichier source C ++; carcolarr.c
, il s'agit d'un fichier source C.Ce problème peut se produire si différentes versions de g ++ et gcc sont installées.
Si ceux-ci ne donnent pas le résultat, vous avez probablement plusieurs versions de gcc installées. Vous pouvez vérifier en utilisant:
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!
la source
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:
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.
la source
strace g++ [args]
j'ai découvert qu'il essayait le mauvais dossier dans le chemin, puis abandonnait.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 à appelercc1plus
.la source
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:
Dans votre cas, vous recherchez cc1plus:
Bien sûr, c'est une solution rapide et une réponse plus solide serait de réparer le chemin cassé.
la source
Installer g ++ lors de l'exécution d'openSuSE
la source
Un problème est survenu avec votre installation GCC . Essayez de le réinstaller comme ceci:
Dans Ubuntu, il
g++
s'agit d'un package de dépendances qui installe la version par défaut deg++
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++-5
par lag++
version souhaitée . Pour trouver votreg++
version actuelle , exécutez ceci:la source
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):
dans les cas plus compliqués, vous devrez peut-être le rejoindre au bon endroit
la source