Şimdi şu kitabı okumaya başladım: UNIX® Ortamında İleri Programlama . İlk kod örneğini çalıştırmayı denemek istedim. Scientific Linux 6.4 kullanıyorum.
Ben indirilen kaynak kodu ve onun README söylediği gibi, Koştum make
sıkıştırılmamış dosya.
İlk programı yazdım (sahte bir ls
komut)
#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;
}
ve sıkıştırılmamış dosyaya koyun. Kitap tavsiye ettiği gibi Sonra koştum: gcc myls.c
. Ama bu hatayı alıyorum:
# 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
Bu sorunu nasıl çözebileceğimi bilmek istedim. Ayrıca herhangi bir dizine yazdığım bir kodu çalıştırmak istiyorum.
include
başlık dosyasına sahip bir dizin: vardır apue.h
. Ancak bu dizindeki tek dosya budur. Gerçek fonksiyon tanımlarının nerede olduğunu anlamıyorum! Birisinin bu kitabın kaynak kod dosyası yapısına aşina olabileceğini düşündüm.
.h
Dosyalar fonksiyonları için protypes sayılabilir. Onların uygulamaları .so
ya .a
da kutuda bulunması gereken dosyalar. Bunlar işlevleri içeren dinamik ve statik kütüphanelerdir.
apue.h
?
err_{quit,sys}
gelmeyi umuyorsun?