我正在制作一个程序,目的是编译另一个程序。 目的是使用exec来运行gcc。 我必须使用execve,我拥有的是:
#include <unistd.h>
#include <sys/types.h>
int main(int argc, char* argv[], char* envp[])
{
argv[0] = "gcc";
execve("/usr/bin/gcc" , argv, envp);
return 0;
}
通过
gcc -Wall p3p4.c -o run
编译没有问题,但在做
时./run p3p1.c
要尝试编译另一个,会发生这种情况:
run: error trying to exec 'cc1': execvp: No such file or directory
编辑:
根据建议,添加以下行:
argv[0] = "gcc";
该程序设法工作。 感谢您的投入。
答案 0 :(得分:3)
尝试将argv[0]
设置为行为良好的程序:
argv[0] = "gcc";
execve("/usr/bin/gcc" , argv, envp);
运行:尝试执行'cc1'时出错:
这显然是gcc在argv[0]
发现意外情况时尝试运行的内容。
答案 1 :(得分:0)
excve
告诉您他没有找到gcc
。尝试
execvpe ("gcc", argv, envp);
请注意,这里envp
没用(而不是POSIX);您可以安全地从envp
删除main()
并致电
execvp ("gcc", argv);