Gerade habe ich begonnen, das Buch zu lesen: Fortgeschrittene Programmierung in der UNIX®-Umgebung . Ich wollte versuchen, sein erstes Codebeispiel auszuführen. Ich verwende Scientific Linux 6.4.
Ich habe den Quellcode heruntergeladen und, wie in der README- make
Datei angegeben, die unkomprimierte Datei ausgeführt.
Ich habe das erste Programm geschrieben (ein Scheinbefehl 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;
}
und legen Sie es in die unkomprimierte Datei. Als das Buch geraten hatte ich dann lief: gcc myls.c
. Aber ich bekomme diesen Fehler:
# 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
Ich wollte wissen, wie ich dieses Problem beheben kann. Ich möchte auch in der Lage sein, einen Code auszuführen, den ich in ein beliebiges Verzeichnis schreibe.
include
mit der Header-Datei apue.h
. Dies ist jedoch die einzige Datei in diesem Verzeichnis. Ich verstehe nicht, wo die tatsächlichen Funktionsdefinitionen sind! Ich dachte, dass jemand mit der Struktur der Quellcodedatei dieses Buches hier vertraut ist.
.h
Dateien enthalten die Prototypen für die Funktionen. Ihre Implementierungen sind in .so
oder .a
Dateien, die auf der Box vorhanden sein müssen. Dies sind dynamische und statische Bibliotheken, die die Funktionen enthalten.
apue.h
?
err_{quit,sys}
zu kommen?