Ошибка компиляции: "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 ответов:
Я не знаю, почему, но я просто переименовал свой исходный файл 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"
конечно, это быстрое решение и более твердый ответ будет фиксировать сломанный путь.