지금 은 유닉스 환경에서 고급 프로그래밍 책을 읽기 시작했습니다 . 첫 번째 코드 예제를 실행하려고했습니다. 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}
에서 오기 를 기대 합니까?