Ошибка компиляции: "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 72

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++ Как /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++