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/
댓글 달기