Ошибка компиляции: "g++: ошибка при попытке выполнить "cc1plus": execvp: нет такого файла или каталога"

когда я компилирую программу C / C++ с popen на php... Я получил эту ошибку:

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

но если я запускаю PHP-код в оболочке.. работает отлично..

в Arch Linux..

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;
?>

спасибо

7 ответов


вам нужно установить gcc-c++ пакета.

yum install gcc-c++

Я не знаю, почему, но я просто переименовал свой исходный файл COLARR.C-коларру.C и ошибка исчезла! вероятно, вам это нужно

sudo apt-get install g++

эта проблема может возникнуть, если установлены разные версии g++ и gcc.

   g++ --version
   gcc --version

если они не дают результата, у вас, вероятно, установлено несколько версий gcc. Вы можете проверить, используя:

    dpkg -l | grep gcc | awk '{print }'

обычно /usr/bin /gcc будет sym-связан с/etc/alternatives /gcc, который снова sym-связан с say/usr/bin /gcc-4.6 или/usr/bin / gcc-4.8 (если у вас установлен gcc-4.6, gcc-4.8.)

изменив эту ссылку, вы можете сделать gcc и g++ работать в одной и той же версии и это может решить вашу проблему!


каждый компилятор имеет свой собственный каталог libexec/. Обычно каталог libexec содержит небольшие вспомогательные программы, вызываемые другими программами. В этом случае gcc ищет свой собственный компилятор "cc1". Ваша машина может содержать разные версии gcc, и каждая версия должна иметь свой собственный "cc1". Обычно эти компиляторы находятся на:


/usr/local/libexec/gcc/<architecture>/<compiler>/<compiler_version>/cc1

аналогичный путь для g++. Выше ошибка означает, что текущая версия gcc используется не в состоянии найти свой собственный компилятор "cc1". Этот обычно указывает на проблему пути.


у меня была такая же проблема при разветвлении с "python"; основная причина в том, что путь поиска относителен, если вы не вызываете g++ as /usr/bin/g++, он не сможет выработать канонические пути для вызова cc1plus.


у меня была та же проблема с gcc "gnat1", и это было связано с неправильным путем. Gnat1 был на версии 4.6, но я выполнял версию 4.8.1, которую я установил. В качестве временного решения я скопировал gnat1 из 4.6 и вставил в папку 4.8.1.

путь к gcc на моем компьютере - /usr/lib/gcc/i686-linux-gnu/

Вы можете найти путь, используя команду find:

find /usr -name "gnat1"

в вашем случае вы бы искали cc1plus:

find /usr -name "cc1plus"

конечно, это быстрое решение, и более твердый ответ будет фиксировать сломанный путь.


установить g++ на openSuSE run

zypper in gcc-c++