Proprio ora ho iniziato a leggere il libro: Advanced Programming in UNIX® Environment . Volevo provare a eseguire il suo primo esempio di codice. Sto eseguendo Scientific Linux 6.4.
Ho scaricato il codice sorgente e, come si dice nel suo README, ho eseguito make
il file non compresso.
Ho scritto il primo programma (un ls
comando simulato )
#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;
}
e inseriscilo nel file non compresso. Come aveva consigliato il libro che poi corse: gcc myls.c
. Ma ottengo questo errore:
# 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
Volevo sapere come posso risolvere questo problema. Voglio anche essere in grado di eseguire un codice che scrivo in qualsiasi directory.
include
che ha il file header apue.h
. Ma questo è l'unico file in quella directory. Non capisco dove siano le effettive definizioni delle funzioni! Ho pensato che qualcuno potesse avere familiarità con la struttura del file di codice sorgente di questo libro qui.
.h
file includono i prototipi per le funzioni. Le loro implementazioni sono in .so
o .a
file che devono essere presenti sulla scatola. Queste sono librerie dinamiche e statiche che contengono le funzioni.
apue.h
?
err_{quit,sys}
di venire?