分叉一个孩子并打电话给gcc

时间:2013-03-23 10:26:25

标签: c linux gcc fork

我正在尝试创建一个获取目录路径的程序,打开目录然后编译内部的c文件。

    //open current directory
    currDir=opendir(fullpath);
    //get the c file, ignore hidden files
    while((cfile=readdir(currDir))!=NULL)
    {
        if(cfile->d_name[0]!='.')
            break;
    }
    /*compile c file*/

    //child process
    if((pid=fork())==0)
    {
        fullpath=realloc(fullpath, sizeof(char)*(strlen(fullpath)+strlen(cfile->d_name)+1));
        strcat(fullpath,cfile->d_name);
        execl("/usr/bin/gcc", "/usr/bin/gcc", "-o", "comp.out", fullpath,NULL);
    }
    else
    {
        wait(NULL);
    }

如您所见,在子进程中我正在创建c文件的完整路径(否则它将找不到它),然后调用gcc,但是我收到以下错误:

collect2: fatal error: cannot find 'ld'
compilation terminated.
  1. 任何想法有什么不对?为什么不成功编译文件?请注意,我确实成功通过终端手动编译它们。
  2. 我还没有找到答案的另一个问题是,如何强制在c文件的目录中创建comp.out文件?因为如果我用文件的完整路径调用gcc,那么.out文件将在主目录中创建。
  3. 我之前尝试过google和研究,但无法找到这两个问题的答案。 谢谢你的帮助。

1 个答案:

答案 0 :(得分:3)

您可以使用

execlp()

代替。它在PATH环境变量中搜索。