2013-03-04 30 views
1

我正在尋找一個編譯另一個程序的目的。 正在使用exec來運行gcc。 我必須使用的execve和我有什麼是:製作一個C程序來編譯另一個

#include <unistd.h> 
#include <sys/types.h> 

int main(int argc, char* argv[], char* envp[]) 
{ 
    argv[0] = "gcc"; 
    execve("/usr/bin/gcc" , argv, envp); 
    return 0; 
} 

這樣做

gcc -Wall p3p4.c -o run 

它編譯沒有問題,但這樣做

./run p3p1.c 

時要儘量和編譯一個又一個,發生這種情況:

run: error trying to exec 'cc1': execvp: No such file or directory 

編輯:

誠如,增加線的時候:

argv[0] = "gcc"; 

的程序管理工作。 感謝您的意見。

+4

爲什麼不使用[製作](http://en.wikipedia.org/wiki/Make_(軟件))? – 2013-03-04 13:53:49

+0

您在'main'中獲得的'argv'和您傳遞給'execve'的'argv'需要不同。它需要用空指針終止,'argv [0]'通常是正在執行的程序的名稱。 – slugonamission 2013-03-04 13:55:02

+0

是不是你使用system()? – 2013-03-04 13:56:16

回答

3

嘗試設置argv[0]像一個乖巧的程序:

argv[0] = "gcc"; 
execve("/usr/bin/gcc" , argv, envp); 

運行:錯誤嘗試執行 'CC1':

這顯然是什麼GCC嘗試當它發現運行在argv[0]中出乎意料。

+0

這似乎與Hello World一起工作!程序,但提出了一個新問題。我將編輯帖子。 – Aleister 2013-03-04 14:05:03

0

excve告訴你他沒有找到gcc。試試

execvpe ("gcc", argv, envp); 

請注意,這裏envp是無用的(而不是POSIX);你可以安全地從main()刪除envp,並呼籲

execvp ("gcc", argv);