我试图做一个程序,它得到一个目录路径,打开目录,然后在里面编译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.

有什么问题吗?为什么它不能成功地编译文件?请注意,我确实成功地通过终端手动编译了它们。
我还没有找到答案的另一个问题是,如何强制在c文件的目录中创建comp.out文件?因为如果我用文件的完整路径调用gcc,那么.out文件将在主目录中创建。
我之前试过谷歌搜索,但都找不到答案。
谢谢你的帮助。

最佳答案

你可以用

execlp()

相反。它在PATH环境变量中搜索。

关于c - fork child 并调用gcc,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15585664/

10-15 00:18