1

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

该程序设法工作。谢谢你的反馈。

4

2 回答 2

3

Try setting argv[0] like a well-behaved program:

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

run: error trying to exec 'cc1':

This is apparently what gcc tries to run when it finds something unexpected in argv[0].

于 2013-03-04T13:56:52.490 回答
0

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

execvpe ("gcc", argv, envp);

请注意,这里envp是无用的(而不是 POSIX);您可以安全地删除envpmain()调用

execvp ("gcc", argv);
于 2013-03-04T14:24:41.003 回答