1

我正在尝试制作一个程序,该程序正在获取目录路径,打开目录,然后在其中编译 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 文件。

我之前尝试过谷歌和研究,但找不到这两个问题的答案。感谢帮助。

4

1 回答 1

3

您可以使用

execlp()

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

于 2013-03-23T11:08:51.963 回答