Ngay bây giờ tôi đã bắt đầu đọc cuốn sách: Lập trình nâng cao trong môi trường UNIX® . Tôi muốn thử chạy ví dụ mã đầu tiên của nó. Tôi đang chạy Khoa học Linux 6.4.
Tôi đã tải xuống mã nguồn và như đã nói trong README của nó, tôi đã chạy make
trong tệp không nén.
Tôi đã viết chương trình đầu tiên (một ls
lệnh giả )
#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;
}
và đặt nó trong tập tin không nén. Như cuốn sách đã khuyên tôi nên chạy : gcc myls.c
. Nhưng tôi nhận được lỗi này:
# 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
Tôi muốn biết làm thế nào tôi có thể khắc phục vấn đề này. Tôi cũng muốn có thể chạy một mã tôi viết trong bất kỳ thư mục nào.
include
, có tệp tiêu đề apue.h
. Nhưng đây là tập tin duy nhất trong thư mục đó. Tôi không hiểu định nghĩa hàm thực tế ở đâu! Tôi nghĩ ai đó có thể quen thuộc với cấu trúc tệp mã nguồn của cuốn sách này ở đây.
.h
tập tin bao gồm các protypes cho các chức năng. Việc triển khai của họ là trong .so
hoặc .a
các tập tin cần phải có trên hộp. Đây là những thư viện động & tĩnh chứa các hàm.
apue.h
gì?
err_{quit,sys}
đến từ đâu?