1

別のプログラムをコンパイルする目的でプログラムを作成しようとしています。exec を使用して gcc を実行することを目的としています。私は execve を使用する必要があり、私が持っているものは次のとおりです。

#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

2 に答える 2

3

argv[0]行儀の良いプログラムのように設定してみてください。

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

run: 'cc1' を実行しようとしてエラーが発生しました:

これは明らかに、gcc が で予期しないものを見つけたときに実行しようとするものargv[0]です。

于 2013-03-04T13:56:52.490 に答える
0

excve彼は を見つけられなかったと言いますgcc。試す

execvpe ("gcc", argv, envp);

ここでenvpは役に立たないことに注意してください(POSIXではありません)。envp安全に削除しmain()て呼び出すことができます

execvp ("gcc", argv);
于 2013-03-04T14:24:41.003 に答える