2017-05-24 39 views
1
#include "apue.h" 
#include <dirent.h> 

int main(int argc, char *argv[]) 
{ 
    DIR  *dp; 
    struct dirent *dirp; 

    if(argc != 2) 
     err_quit("usage: ls directory_name"); 

    if((dp=opendir(argv[1])) == NULL) 
     err_sys("can't open %s", argv[1]); 

    while((dirp = readdir(dp)) !=NULL) 
     printf("%s\n", dirp->d_name); 

    closedir(dp); 

    exit(0); 

} 

我下載了apue.h文件,它在當前目錄中作爲我的源文件。當我嘗試使用clang和OS X進行編譯時,會發生以下錯誤。unix示例中的高級編程ls(1)命令錯誤

1 warning generated. 
    Undefined symbols for architecture x86_64: 
     "_err_quit", referenced from: 
      _main in lsnew-cbcc3e.o 
     "_err_sys", referenced from: 
      _main in lsnew-cbcc3e.o 
    ld: symbol(s) not found for architecture x86_64 
    clang error: linker command failed with exit code 1 (use -v to see invocation) 

有人可以引導我正確的方向,以什麼是錯的?此代碼是否僅適用於32位系統?

謝謝。

+0

'我下載了apue.h ...它不需要鏈接到一個實際庫嗎? – ThingyWotsit

回答

1

我對你正在使用的例子並不熟悉,但是你看到的錯誤是一個鏈接器錯誤:這意味着儘管頭文件apue.h已經聲明函數存在,但沒有任何實際定義函數。

他們應該在另一個.c文件中提供,也許apue.c?然後你會被沿列出它的鏗鏘命令行包括在您編譯的程序您lsnew.c

clang -o lsnew apue.c lsnew.c 

我不能告訴你,你可能會發現所需的文件,但它可能應該在您發現的相同地點apue.h

+0

這些函數可能已經被編譯成靜態或動態庫,然後你必須鏈接它們。 – SHG

+0

@SHG我通過電子郵件發送作者,並被告知使用make文件。他說沒有.c源文件。我正在努力學習這一切。我進入了目錄,上面寫着make和我在終端上輸入make的文件。發生了一堆事情,但我現在不知道該怎麼做。我不知道我是否做得對。 – clawhammer1234