Je viens de commencer la lecture du livre: Programmation avancée dans l'environnement UNIX® . Je voulais essayer d'exécuter son premier exemple de code. J'utilise Scientific Linux 6.4.
J'ai téléchargé le code source et comme il est dit dans son README, j'ai couru make
dans le fichier non compressé.
J'ai écrit le premier programme (une fausse ls
commande)
#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;
}
et le mettre dans le fichier non compressé. Comme le livre que j'avais conseillé alors couru: gcc myls.c
. Mais je reçois cette erreur:
# 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
Je voulais savoir comment résoudre ce problème. Je veux également pouvoir exécuter un code que j'écris dans n'importe quel répertoire.
include
qui contient le fichier d'en-tête apue.h
. Mais c'est le seul fichier de ce répertoire. Je ne comprends pas où sont les définitions de fonction réelles! Je pensais que quelqu'un connaissait peut-être la structure des fichiers de code source de ce livre ici.
.h
fichiers incluent les protypes des fonctions. Leurs implémentations sont dans .so
ou des .a
fichiers qui doivent être présents sur la boîte. Ce sont des bibliothèques dynamiques et statiques qui contiennent les fonctions.
apue.h
?
err_{quit,sys}
?