2013-03-23 78 views
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文件將在主目錄中創建。

我試圖谷歌和研究之前,但無法找到兩個問題的答案。 感謝您的幫助。

+0

對於#2:指定完整路徑,與輸入相同。對於#1,可能是一個環境問題('PATH')。關於#2的 – Mat 2013-03-23 10:29:19

+0

:你是什麼意思?你能給個例子嗎?關於#1的 :我能做些什麼? – Jjang 2013-03-23 10:31:00

+0

你對#2有什麼不瞭解?你在做什麼來源文件的路徑?你爲什麼不爲輸出做同樣的事情? – Mat 2013-03-23 10:32:38

回答

3

您可以使用

execlp() 

代替。它在PATH環境變量中搜索。

+0

好了,問題解決了,需要在eclipse配置中手動添加PATH。 – Jjang 2013-03-23 13:56:49

相關問題