include 관련 질문입니다.
글쓴이: 하하 / 작성시간: 수, 2003/10/01 - 11:53오전
링크 에러입니다.
무엇이 문제인가요?
1.h
#ifndef HA #define HA int a(); #endif
2.h
#ifndef HB #define HB int b(); #endif
main.c
#include "1.h" #include "2.h" main() { a(); b(); } int a(){ printf(" a 다 "); }
2.c
#include "2.h" int b() { printf(" b다"); }
Makefile
CC = gcc AR = ar GWLIB = 1lib.a PROGRAM = test OBJS = 2.o .c.o: $(CC) -c $< all: $(PROGRAM) $(GWLIB): $(OBJS) @$(AR) -r $(GWLIB) $? $(PROGRAM): $(GWLIB) main.o $(CC) $(GWLIB) -o $(PROGRAM) main.o clean: /bin/rm -f *.o $(GWLIB) $(PROGRAM)
make 하면
main.o: In function `main': main.o(.text+0xc): undefined reference to `b' collect2: ld returned 1 exit status make: *** [test] 오류 1
- - ;;
이런것도 몰라 라고 하실거 같은데..
정말로 모르겠습니다. - - ;;
main.c 를 보면 a와 b함수를 사용하는데.
a는 main.c 안에서 정의 하였고 1.h에서 선언
b는 2.c 안에서 정의 하였고 2.h에서 선언.
main.c 는 include "a.h" , include "b.h"
이렇게 하면 되지 않는데?/
무엇가 중대한 착각을 하고 있는거 같습니다.
그럼 즐거운 하루 되세요... ^______^;;;;;;;
Forums:
gcc 의 라이브러리는 접두사 + 이름 + 확장자 의 규칙이 있습니다.
gcc 의 라이브러리는 접두사 + 이름 + 확장자 의 규칙이 있습니다.
라이브러리의 이름이 abc 라고 한다면 그 파일 이름은 libabc.a 입니다.
lib + 이름 + .a의 구성이죠.
그러므로 1lib.a 같은 이름은 gcc가 사용하기에 적당하지 않습니다.(물론 안 되는 건 아니지만...)
그리고 이 abc 라는 라이브러리, 즉 libabc.a 를 사용하여 링크할 때에는 이름 부분만 따로 분리해서 사용합니다.
$(CC) -o $(PROGRAM) main.o -labc -L.
사용법은 "-l라이브러리명(abc)"입니다. 맨 뒤에 붙은 "-L디렉토리"는 라이브러리가 존재하는 디렉토리입니다. /usr/lib, /usr/local/lib 등이 아닌 경우엔 명시적으로 적어주어야 합니다.
자세한 것은 info gcc 하세요.
-----
http://monpetit.posterous.com/
http://monpetit.tistory.com/
댓글 달기