たった今、私は本を読み始めました:UNIX®環境での高度なプログラミング。最初のコード例を実行してみました。Scientific Linux 6.4を実行しています。
ソースコードをダウンロードし、READMEにあるようmake
に、非圧縮ファイルで実行しました。
最初のプログラムを作成しました(モックls
コマンド)
#include "./include/apue.h"
#include <dirent.h>
int
main(int argc, char *argv[])
{
DIR *dp;
struct dirent *dirp;
if(argc!=2)
err_quit("usage: test 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);
return 0;
}
それを非圧縮ファイルに入れます。本が助言したように、私は走りました:gcc myls.c
。しかし、私はこのエラーを受け取ります:
# gcc myls.c
/tmp/ccWTWS2I.o: In function `main':
test.c:(.text+0x20): undefined reference to `err_quit'
test.c:(.text+0x5b): undefined reference to `err_sys'
collect2: ld returned 1 exit status
この問題を解決する方法を知りたかった。また、任意のディレクトリで記述したコードを実行できるようにします。
include
は、ヘッダーファイルがあるディレクトリがありますapue.h
。しかし、これはそのディレクトリ内の唯一のファイルです。実際の関数定義がどこにあるのかわかりません!誰かがこの本のソースコードファイルの構造に精通していると思います。
.h
ファイルには、機能のためのprotypesが含まれます。それらの実装は、ボックスに存在する必要のあるファイル.so
または.a
ファイルです。これらは、関数を含む動的および静的ライブラリです。
apue.h
何ですか?
err_{quit,sys}
から来ると思いますか?