프로그램 컴파일 시returned 1 exit status 에러 질문이요~~
APUE2 UNIX 고급 프로그래밍 책을 새롭게 공부하고 있는데
returned 1 exit status 라는 에러가 뜹니다..
1 #include "apue.h"
2 #include "dirent.h"
3
4 int main(int argc, char *argv[])
5 {
6 DIR *dp;
7 struct dirent *dirp;
8
9 if ((dp = opendir(argv[1])) == NULL)
10 err_sys("can't open %s", argv[1]);
11 while ((dirp = readdir(dp)) != NULL)
12 printf("%s\n", dirp->d_name);
13
14 closedir(dp);
15 exit(0);
16 }
[root@localhost Programming]# gcc -W -Wall -o 1_3 1_3.c
1_3.c: In function ‘main’:
1_3.c:4: warning: unused parameter ‘argc’
/tmp/cckUSjG6.o: In function `main':
1_3.c:(.text+0x38): undefined reference to `err_sys'
collect2: ld returned 1 exit status
[root@localhost Programming]#
apue.h 헤더파일을 다운받아서 /usr/include 디렉토리에 위치시키고 현재 디렉토리에도 포함시켰는데
계속 같은에러가 뜨네요. 해결방법좀 알려주세요~
"collect2: ld returned 1 exit
"collect2: ld returned 1 exit status"는 단지 링커가 정상 종료하지 않았다는 뜻일 뿐입니다.
링크가 왜 실패했는지는 그 윗 줄에 나와있네요.
"1_3.c:(.text+0x38): undefined reference to `err_sys'"
err_sys을 찾을 수 없어서 실패했네요.
링커가 이 심볼을 찾을 수 없는 것은 필요한 라이브러리나 오브젝트 파일을 알려주지 않았기 때문이겠지요.
그럼 답이 나왔네요. err_sys가 정의되어있는 라이브러리나 오브젝트 파일을 링커에게 알려줘야지요.
또는 err_sys가 정의되어 있는 파일이 아직 컴파일되어 있지 않다면 그냥 함께 컴파일하면 됩니다.
이 세 가지 중 어떤 경우인지는 직접 찾으셔야할 것 같네요.
-lm 옵션 줘보세요
답글을 늦게 달긴 했는데 저도 비슷하게 문제생겨서 stackoverflow에 찾아봤습니다.
math.h 같은 경우는 -lm 옵션을 줘야하더라고요
저도 그렇게 나오는데..
저도 그렇게 나오는데..... 어떻게 해야 하는지 모르겠어요.
apue.h 에 해당하는 라이브러리를 링크해주세요.
apue.h 와 같이 동봉된 라이브러리는 없었나요?
책 본문에 err_sys를 비롯한 오류 함수들 소스
책 본문에 err_sys를 비롯한 오류 함수들 소스 코드 있습니다. 그거랑 같이 빌드하면 됩니다.
제가 지금 들고 있는 건 3판 번역서인데 부록 B에 있군요. 2판에선 어땠는지 기억이 안 나는데 아마 있었을 겁니다.
댓글 달기