2017-12-04 20 views
0

파일 에 함수 int get_token();이 정의되어 있으며이 파일을 헤더 파일 scanner.h에 선언했습니다. 이제이 헤더 파일을 precedence.h이라는 다른 헤더에 포함 시켰으며, 마지막으로 을 precedence.c 파일에 포함 시켰습니다. 여기에서 내 함수 get_token();을 호출하려고합니다. make를 호출 링커가 다른 파일에서 내 함수가 정의되어 있지 않음을 알립니다.

나는이 함수를 호출

는 오류 다음 발생 :

gcc precedence.c t_stack.c -o expr 
/tmp/ccNgwuFu.o: In function `main': 
precedence.c:(.text+0x730): undefined reference to `get_token' 
collect2: error: ld returned 1 exit status 
Makefile:8: recipe for target 'expr' failed 
make: *** [expr] Error 1 

을이 또한 변화 내가 precedence.h과 함께 scanner.h을 포함하여 시도 내 메이크

CC=gcc 
CFILES=precedence.c t_stack.c 
HFILES=precedence.h t_stack.h token.h error.h 

all: expr 

expr: $(CFILES) $(HFILES) 
    $(CC) $(CFILES) -o [email protected] 

입니다 Makefile.

저는 C 프로그래밍에 익숙하지 않습니다.

+2

당신은 scanner.c''에서'get_token'을 정의했다. 그런 다음'scanner.c'를 참조하지 않고 프로그램을 링크하려고했습니다. 'scanner.c'를'Makefile'에 추가하고, 컴파일하고, 링크해야합니다. 또는, 대신에, get_token를 사용하지 말아주세요. –

+0

내가 틀린 메이크 파일을 편집하고 있었다 : D LOL 감사합니다. – angie

답변

1

링커는 컴파일러에 전달되지 않는 파일 scanner.c을 정의 할 것 때문에 기능 get_token를 해결하기 위해 실패합니다. 포함 파일 아마도 이 기능을 선언합니다 (즉, 본문/구현없이 함수 프로토 타입 제공).

당신은 아마 쓸 것 :

gcc precedence.c t_stack.c scanner.c -o expr