Beim Kompilieren des C / C ++ - Programms mit popen
in php
... wurde folgende Fehlermeldung angezeigt:
g++: error trying to exec 'cc1plus': execvp: No such file or directory
aber wenn ich PHP-Code in der Shell ausführen .. funktioniert es gut ..
in Arch Linux ..
PHP-Code:
<?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;
?>
Vielen Dank
php xx.php
alshttp
Benutzer auszuführen . Alle von ihnen sind Erfolg ... und die Ausgabe vong++ -v
in PHP-Code ist ähnlich wie in Shell.gcc -print-search-dirs
Wie wäre es damit? Sind die Ausgänge gleich ?Antworten:
Sie müssen das
gcc-c++
Paket installieren .quelle
apk add g++
Ich weiß nicht warum, aber ich habe gerade meine Quelldatei COLARR.C in colarr.c umbenannt und der Fehler ist verschwunden! wahrscheinlich brauchst du das
quelle
.C
Erweiterung in Großbuchstaben eine von mehreren Konventionen für C ++ - Quellen ist -.cpp
und.cc
zwei weitere. Die Großbuchstabenkonvention.C
interagiert schlecht mit Dateisystemen, bei denen die Groß- und Kleinschreibung nicht berücksichtigt wird (z. B. Windows, macOS). Wenn Sie dies getan habenCOLARR.C
, hat das System es wahrscheinlich als C ++ - Quelldatei angesehen. ascolarr.c
ist eine C-Quelldatei.Dieses Problem kann auftreten, wenn verschiedene Versionen von g ++ und gcc installiert sind.
Wenn diese nicht zum Ergebnis führen, sind wahrscheinlich mehrere Versionen von gcc installiert. Sie können Folgendes überprüfen:
Normalerweise wird / usr / bin / gcc mit / etc / alternatives / gcc verknüpft, was wiederum mit /usr/bin/gcc-4.6 oder /usr/bin/gcc-4.8 verknüpft ist (falls vorhanden) gcc-4.6, gcc-4.8 installiert.)
Durch Ändern dieses Links können Sie gcc und g ++ in derselben Version ausführen lassen, wodurch Ihr Problem möglicherweise behoben wird!
quelle
Jeder Compiler hat ein eigenes libexec / -Verzeichnis. Normalerweise enthält das libexec-Verzeichnis kleine Hilfsprogramme, die von anderen Programmen aufgerufen werden. In diesem Fall sucht gcc nach einem eigenen 'cc1'-Compiler. Ihr Computer enthält möglicherweise verschiedene Versionen von gcc, und jede Version sollte ihre eigene 'cc1' haben. Normalerweise befinden sich diese Compiler auf:
Ähnlicher Pfad für g ++. Der obige Fehler bedeutet, dass die aktuell verwendete gcc-Version keinen eigenen 'cc1'-Compiler finden kann. Dies weist normalerweise auf ein PATH-Problem hin.
quelle
strace g++ [args]
Ich stellte fest, dass sie den falschen Ordner im Pfad versuchte und dann aufgab.Ich hatte das gleiche Problem beim Gabeln mit 'Python'; Der Hauptgrund ist, dass der Suchpfad relativ ist. Wenn Sie nicht
g++
als aufrufen, kann er die aufzurufenden/usr/bin/g++
kanonischen Pfade nicht ermittelncc1plus
.quelle
Ich hatte das gleiche Problem mit gcc "gnat1" und es lag daran, dass der Pfad falsch war. Gnat1 war auf Version 4.6, aber ich führte Version 4.8.1 aus, die ich installiert hatte. Als vorübergehende Lösung habe ich gnat1 aus 4.6 kopiert und in den Ordner 4.8.1 eingefügt.
Der Pfad zu gcc auf meinem Computer lautet / usr / lib / gcc / i686-linux-gnu /
Sie können den Pfad mit dem Befehl find finden:
In Ihrem Fall würden Sie nach cc1plus suchen:
Dies ist natürlich eine schnelle Lösung, und eine fundiertere Antwort wäre, den unterbrochenen Pfad zu beheben.
quelle
Installieren Sie g ++ beim Öffnen von openSuSE
quelle
Bei Ihrer GCC- Installation ist ein Fehler aufgetreten. Versuchen Sie, es wie folgt neu zu installieren:
In Ubuntu
g++
ist dies ein Abhängigkeitspaket, das die Standardversion vong++
für Ihre Betriebssystemversion installiert . Das einfache Entfernen und erneute Installieren des Pakets funktioniert also nicht, da die Standardversion installiert wird. Deshalb müssen Sie neu installieren.Hinweis: Sie können die
g++-5
durch Ihre gewünschteg++
Version ersetzen . Um Ihre aktuelleg++
Version zu finden, führen Sie Folgendes aus:quelle
Möglicherweise tritt dieses Problem auch auf, wenn die Umgebungsvariable GCC_ROOT auf einen falschen Speicherort verweist. Die wahrscheinlich einfachste Lösung könnte sein (auf einem * nix-ähnlichen System):
In komplizierteren Fällen müssen Sie es möglicherweise an der richtigen Stelle neu platzieren
quelle