1. ホーム
  2. c

[解決済み】未定義参照 makefile が間違っているのかも?

2022-02-12 21:18:58

質問

以前、レコードの配列セットを宣言する際に問題が発生しました。今思うと、私のMakefileか何かに何か問題があるようです。

以下は私のMakefileです。

EEXEC = proj1  
CC = gcc  
CFLAGS = -c -Wall  

$(EXEC) :   main.o set.o 
    $(CC) -o $(EXEC) main.o set.o 

main.o  :   main.h main.c
    $(CC) $(CFLAGS) main.c  

set.o   :   set.h set.c
    $(CC) $(CFLAGS) set.c   

set.cファイルにはもっと多くの関数がありますが、現在テストしているのはこれらの関数です。

DisjointSet *CreateSet(int numElements);  
DisjointSet *MakeSet(DisjointSet *S,int ele, int r);  
void Print(DisjointSet *S);

そして、ターミナルで受けているエラーは

main.o: In function `main':  
main.c:(.text+0x19): undefined reference to `CreateSet'  
main.c:(.text+0x43): undefined reference to `MakeSet'  
main.c:(.text+0x5f): undefined reference to `Print'  

解決方法は?

このエラーはリンカーエラーで、プログラムをリンクする際にリンカーが 'CreateSet' という名前の関数(など)を見つけることができないことを伝えています。ビルド・コマンドに "set.o" を含めているようなので、なぜそうなるのかはすぐにはわかりません。

make -n"は、"make"が実行するコマンドを、実際に実行することなく表示します。というようなコマンドが表示されると思います。

gcc -o proj1 main.o set.o

これを手作業で実行してみて、どこにたどり着くかを見てみましょう。