2017-12-04 9 views
0

私はファイルscanner.cに定義された関数int get_token();を持っていて、ヘッダファイルscanner.hに宣言しています。今私はprecedence.hと呼ばれる別のヘッダーにこのヘッダーファイルを含めました。最後にを呼び出すprecedence.cファイルにprecedence.hを含めました。他のファイルからの私の機能が定義されていないことを叫ぶ

私はこの関数を呼び出し、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含めて試してみましたが、私のMakefileの

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 
関連する問題