Kiedy kompiluję program popen
w C / C ++ z in php
... otrzymałem ten błąd:
g++: error trying to exec 'cc1plus': execvp: No such file or directory
ale jeśli uruchomię kod php w powłoce… to działa dobrze…
w Arch Linux ..
Kod 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;
?>
dzięki
php xx.php
jakohttp
użytkownik. wszystkie z nich jest sukces ... a wyjścieg++ -v
w kodzie PHP jest podobny w skorupkach z ..gcc -print-search-dirs
co powiesz na to? Czy wyjścia są takie same ?Odpowiedzi:
Musisz zainstalować
gcc-c++
pakiet.yum install gcc-c++
źródło
apk add g++
Nie wiem dlaczego, ale właśnie zmieniłem nazwę mojego pliku źródłowego COLARR.C na colarr.c i błąd zniknął! prawdopodobnie tego potrzebujesz
sudo apt-get install g++
źródło
.C
rozszerzenie pisane wielkimi literami jest jedną z wielu konwencji dla źródeł C ++ -.cpp
i.cc
są dwie inne. Górnym przypadków.C
konwencji współdziała źle z systemów plików z opcją niewrażliwe (Windows, MacOS, na przykład). Kiedy to robiłeśCOLARR.C
, system prawdopodobnie patrzył na to jako plik źródłowy C ++; ascolarr.c
, jest to plik źródłowy C.Ten problem może wystąpić, jeśli są zainstalowane różne wersje g ++ i gcc.
g++ --version gcc --version
Jeśli to nie daje rezultatu, prawdopodobnie masz zainstalowanych kilka wersji gcc. Możesz to sprawdzić za pomocą:
dpkg -l | grep gcc | awk '{print $2}'
Zwykle / usr / bin / gcc będzie dowiązane symbolicznie do / etc / alternatives / gcc, które jest ponownie połączone symbolicznie z, powiedzmy /usr/bin/gcc-4.6 lub /usr/bin/gcc-4.8 (w przypadku, gdy masz Zainstalowano gcc-4.6, gcc-4.8).
Zmieniając ten link, możesz sprawić, by gcc i g ++ działały w tej samej wersji, co może rozwiązać Twój problem!
źródło
Każdy kompilator ma swój własny katalog libexec /. Zwykle katalog libexec zawiera małe programy pomocnicze wywoływane przez inne programy. W tym przypadku gcc szuka własnego kompilatora „cc1”. Twój komputer może zawierać różne wersje gcc, a każda wersja powinna mieć swoje własne „cc1”. Zwykle te kompilatory znajdują się na:
/usr/local/libexec/gcc/<architecture>/<compiler>/<compiler_version>/cc1
Podobna ścieżka dla g ++. Powyższy błąd oznacza, że aktualnie używana wersja gcc nie jest w stanie znaleźć własnego kompilatora „cc1”. Zwykle wskazuje to na problem ze ścieżką.
źródło
strace g++ [args]
, odkryłem, że próbowałem niewłaściwego folderu w ścieżce, a potem się poddałem.Miałem ten sam problem podczas rozwidlania z „pythonem”; głównym powodem jest to, że ścieżka wyszukiwania jest względna, jeśli nie wywołasz
g++
as/usr/bin/g++
, nie będzie w stanie określić kanonicznych ścieżek do wywołaniacc1plus
.źródło
Miałem ten sam problem z gcc "gnat1" i był on spowodowany błędną ścieżką. Gnat1 był w wersji 4.6, ale wykonywałem wersję 4.8.1, którą zainstalowałem. Jako rozwiązanie tymczasowe skopiowałem gnat1 z wersji 4.6 i wkleiłem do folderu 4.8.1.
Ścieżka do gcc na moim komputerze to / usr / lib / gcc / i686-linux-gnu /
Możesz znaleźć ścieżkę za pomocą polecenia find:
find /usr -name "gnat1"
W twoim przypadku poszukałbyś cc1plus:
find /usr -name "cc1plus"
Oczywiście jest to szybkie rozwiązanie, a solidniejszą odpowiedzią byłoby naprawienie zepsutej ścieżki.
źródło
Zainstaluj g ++ przy uruchomieniu openSuSE
zypper in gcc-c++
źródło
Coś poszło nie tak z instalacją GCC . Spróbuj ponownie zainstalować to w następujący sposób:
sudo apt-get install --reinstall g++-5
W Ubuntu
g++
jest to pakiet zależności, który instaluje domyślną wersjęg++
dla twojej wersji systemu operacyjnego. Dlatego samo usunięcie i ponowne zainstalowanie pakietu nie zadziała, ponieważ zainstaluje wersję domyślną. Dlatego musisz ponownie zainstalować.Uwaga: możesz zastąpić
g++-5
żądanąg++
wersję. Aby znaleźć aktualnąg++
wersję, uruchom to:g++ --version
źródło
Możesz mieć ten problem również, jeśli zmienna środowiskowa GCC_ROOT wskazuje niewłaściwą lokalizację. Prawdopodobnie najprostszą poprawką może być (w systemie podobnym do * nix):
unset GCC_ROOT
w bardziej skomplikowanych przypadkach może zajść potrzeba przeniesienia go we właściwe miejsce
źródło