Quando compilo o programa C / C ++ com popen
in php
..., recebo este erro:
g++: error trying to exec 'cc1plus': execvp: No such file or directory
mas se eu executar o código php no shell .. funciona bem ..
no Arch Linux ..
Código 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;
?>
obrigado
php xx.php
comohttp
usuário. todos eles são um sucesso ... e a saída dog++ -v
código php é semelhante ao do shell ..gcc -print-search-dirs
que tal agora? As saídas são iguais ?Respostas:
Você precisa instalar o
gcc-c++
pacote.fonte
apk add g++
Não sei por que, mas acabei de renomear meu arquivo de origem COLARR.C para colarr.c e o erro desapareceu! provavelmente você precisa disso
fonte
.C
extensão em maiúsculas é uma das várias convenções para a origem C ++ -.cpp
e.cc
há outras duas. A.C
convenção de maiúsculas interage mal com sistemas de arquivos que não diferenciam maiúsculas de minúsculas (Windows, macOS, por exemplo). Quando você fez issoCOLARR.C
, o sistema provavelmente estava olhando para ele como um arquivo de origem C ++; comocolarr.c
, é um arquivo de origem C.Este problema pode ocorrer se diferentes versões de g ++ e gcc estiverem instaladas.
Se eles não derem o resultado, você provavelmente tem várias versões do gcc instaladas. Você pode verificar usando:
Normalmente, / usr / bin / gcc será sym-linked a / etc / alternative / gcc que é novamente sym-linked para dizer /usr/bin/gcc-4.6 ou /usr/bin/gcc-4.8 (no caso de você ter gcc-4.6, gcc-4.8 instalado.)
Ao alterar este link, você pode fazer o gcc e g ++ rodarem na mesma versão e isso pode resolver o seu problema!
fonte
Cada compilador possui seu próprio diretório libexec /. Normalmente, o diretório libexec contém pequenos programas auxiliares chamados por outros programas. Neste caso, o gcc está procurando seu próprio compilador 'cc1'. Sua máquina pode conter diferentes versões do gcc, e cada versão deve ter seu próprio 'cc1'. Normalmente, esses compiladores estão localizados em:
Caminho semelhante para g ++. O erro acima significa que a versão atual do gcc usada não é capaz de encontrar seu próprio compilador 'cc1'. Isso normalmente aponta para um problema de PATH.
fonte
strace g++ [args]
, descobri que ele estava tentando a pasta errada no caminho e desistindo.Eu tive o mesmo problema ao fazer bifurcação com 'python'; o principal motivo é que o caminho de pesquisa é relativo, se você não chamar
g++
como/usr/bin/g++
, não será possível descobrir os caminhos canônicos a serem chamadoscc1plus
.fonte
Eu tive o mesmo problema com gcc "gnat1" e foi devido ao caminho estar errado. Gnat1 estava na versão 4.6, mas eu estava executando a versão 4.8.1, que havia instalado. Como solução temporária, copiei o gnat1 do 4.6 e colei na pasta 4.8.1.
O caminho para o gcc no meu computador é / usr / lib / gcc / i686-linux-gnu /
Você pode encontrar o caminho usando o comando find:
No seu caso, você procuraria cc1plus:
Claro, esta é uma solução rápida e uma resposta mais sólida seria consertar o caminho quebrado.
fonte
Instale o g ++ na execução do openSuSE
fonte
Algo deu errado com a instalação do GCC . Tente reinstalá-lo assim:
No Ubuntu,
g++
é um pacote de dependência que instala a versão padrão dog++
para sua versão do sistema operacional. Portanto, simplesmente remover e instalar o pacote novamente não funcionará, pois ele instalará a versão padrão. É por isso que você precisa reinstalar.Nota: Você pode substituir o
g++-5
com ag++
versão desejada . Para encontrar suag++
versão atual, execute o seguinte:fonte
Você também pode ter esse problema se tiver a variável de ambiente GCC_ROOT apontando para um local errado. Provavelmente a correção mais simples poderia ser (em um sistema semelhante a * nix):
em casos mais complicados, você pode precisar recolocá-lo no local adequado
fonte