c - fork 一个 child 并调用 gcc

标签 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 文件。

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

最佳答案

你可以使用

execlp()

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

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

相关文章:

c - 隐式参数转换

c - 如何从冒号分隔的文件中扫描整数值

c++ - 需要一个散列函数来从 ipv6 16 字节地址和 TCP 2 字节端口号中创建 32 位值

linux - 将 .Net Core 1.0 升级到 2.0 Ubuntu 16.10

linux - 推荐在 Felix 上开发的操作系统

c - gcc中汇编语句的问题

取消如何将定义传递给 CMock

linux - 在 Linux 上在 UTF-8 和 ISO-8859 之间转换文件

c++ - Linux 64bit 调用约定使用寄存器传递 'this' 指针,但代码效率较低?

c - MicroFocus cobol 命令 cobinit、cobcall 和 cobtidy 在我的 C 程序中抛出错误