เพียงแค่ตอนนี้ฉันได้เริ่มอ่านหนังสือ: การเขียนโปรแกรมใน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}
จะมาจากไหน