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

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

编辑:

据build议,添加该行时:

 argv[0] = "gcc"; 

该scheme设法工作。 谢谢你的反馈。

尝试像一个行为良好的程序设置argv[0]

 argv[0] = "gcc"; execve("/usr/bin/gcc" , argv, envp); 

运行:错误尝试执行'cc1':

这显然是gcc尝试在argv[0]发现意外事件时运行的。

excve告诉你他没有找到gcc 。 尝试

 execvpe ("gcc", argv, envp); 

请注意,这里envp是无用的(而不是POSIX)。 你可以安全地从main()移除envp并调用

 execvp ("gcc", argv);