Justo ahora comencé a leer el libro: Programación avanzada en el entorno UNIX® . Quería intentar ejecutar su primer ejemplo de código. Estoy ejecutando Scientific Linux 6.4.
Descargué el código fuente y, como dice en su make
archivo README, ejecuté el archivo sin comprimir.
Escribí el primer programa (un ls
comando simulado )
#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;
}
y ponerlo en el archivo sin comprimir. Como había aconsejado el libro me encontré a continuación: gcc myls.c
. Pero me sale este error:
# 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
Quería saber cómo puedo solucionar este problema. También quiero poder ejecutar un código que escribo en cualquier directorio.
include
que tiene el archivo de encabezado apue.h
. Pero este es el único archivo en ese directorio. ¡No entiendo dónde están las definiciones de funciones reales! Pensé que alguien podría estar familiarizado con la estructura del archivo de código fuente de este libro aquí.
.h
archivos incluyen los prototipos para las funciones. Sus implementaciones están en .so
o .a
archivos que deben estar presentes en la caja. Estas son bibliotecas dinámicas y estáticas que contienen las funciones.
apue.h
?
err_{quit,sys}
venir?