制作一个C程序来编译另一个

时间:2013-03-04 13:51:30

标签: c unix ubuntu

我正在制作一个程序,目的是编译另一个程序。 目的是使用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";

该程序设法工作。 感谢您的投入。

2 个答案:

答案 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);