Только сейчас я начал читать книгу: Расширенное программирование в среде 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}
приехать?