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. 答えが見つからないもう1つの質問は、comp.outファイルをcファイルのディレクトリに強制的に作成する方法です。ファイルのフルパスを指定してgccを呼び出すと、.outファイルがホームディレクトリに作成されるためです。

私は以前にグーグルと調査を試みましたが、両方の質問に対する答えを見つけることができませんでした。手伝ってくれてありがとう。

4

1 に答える 1

3

使用できます

execlp()

代わりは。PATH環境変数を検索します。

于 2013-03-23T11:08:51.963 に答える