Как скомпилировать GCC из переполнения стека

Я пробовал эту функцию из PHP с:

exec("gcc testC.c -o runner.out 2>&1",$output,$status);

но когда я печатаю $ output, я получаю эту ошибку :(:

gcc: error trying to exec 'cc1': execvp: No such file or directory\n

Если я бегу

exec("/usr/bin/gcc testing/pruebaC.c -o testing/frommm.out 2>&1",$output,$status);

я понимаю

collect2: fatal error: cannot find 'ld'\n

Мой пользователь:

groups vagrant
vagrant : vagrant root adm cdrom sudo dip www-data plugdev lpadmin sambashare

Мой каталог gcc

/usr/bin$ ls -l gcc
lrwxrwxrwx 1 root vagrant 7 Apr  7  2014 gcc -> gcc-4.8

Если я запускаю из терминала всю работу, я могу скомпилировать и выполнить, но из PHP я не могу 🙁

0

Решение

Я не уверен, что произошло в комментариях, но я выяснил корень проблемы и отвечаю на это просто, чтобы прояснить для любых будущих читателей.

@zneak прав. Если вы попробуете и echo $_ENV["PATH"] и ничего не получить в ответ, это означает, что PHP выполняет gcc и любые другие исполняемые файлы, не ища их в PATH переменная. В результате он иногда не может найти ни одного из них. @ Марко интерпретируется как повторение PATH переменная в bash, и выполняется echo $PATH вместо. Тем не менее, эти две переменные являются отдельными, и часто PHP PATH не установлен в то время как Баш PATH является.

Чтобы решить эту проблему, вам нужно определить PATH для PHP в его переменных среды. Если вы не уверены, что поставить, обратитесь к PATH переменная определена в bash. Например, мой текущий проект Laravel имеет строку

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

в нижней части это .env файл, и теперь выполняется просто gcc (без указания полного пути /usr/bin/gcc) работает правильно.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]