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