前提・実現したいこと
C言語のコードをmakefileを用いてコンパイルしたい。
make実行中に以下のようなエラーが生じた。
発生している問題・エラーメッセージ
> make gcc -o Sample Sample.o C:/Strawberry/c/bin/../lib/gcc/x86_64-w64-mingw32/8.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: Sample.o:Sample.c:(.text+0x2f): undefined reference to `put_hai' collect2.exe: error: ld returned 1 exit status make: *** [Sample] エラー 1
該当のソースコード
Sample.c
C
1#include <stdio.h> 2#include <putkei.h> 3int main(){ 4 int a[3]={10,3,8}; 5 put_hai(3,a); 6}
GNUmakefile
# (1)コンパイラ CC = gcc # (2)コンパイルオプション CFLAGS = # (3)実行ファイル名 TARGET = Sample # (4)コンパイル対象のソースコード SRCS = Sample.c # (5)オブジェクトファイル名 OBJS = $(SRCS:.c=.o) # (6)インクルードファイルのあるディレクトリパス INCDIR = -I../../inc # (7)ライブラリファイルのあるディレクトリパス LIBDIR = # (8)追加するライブラリファイル LIBS = # (9)ターゲットファイル生成 $(TARGET): $(OBJS) $(CC) -o $@ $^ $(LIBDIR) $(LIBS) # (10)オブジェクトファイル生成 $(OBJS): $(SRCS) $(CC) $(CFLAGS) $(INCDIR) -c $(SRCS) # (11)"make all"で make cleanとmakeを同時に実施。 all: clean $(OBJS) $(TARGET) # (12).oファイル、実行ファイル、.dファイルを削除 clean: -rm -f $(OBJS) $(TARGET) *.d
putkei.c
C
1#include <stdio.h> 2void put_hai(int gyo,int *hyo){ 3 int i=0; 4 printf("{ %d",hyo[i]); 5 for(i=1;i<gyo;i++){ 6 printf(", %d",hyo[i]); 7 } 8 printf(" }\n"); 9}
putkei.h
h
1void put_hai(int gyo,int *hyo);
補足情報(FW/ツールのバージョンなど)
フォルダの構造は以下の通りです。
c_renshu | |- inc | |-putkei.c | |-putkei.h | |- mkfile_v |-renshu |-Sample.c |-GNUmakefile
GNUmakefileは以下のサイトのを参考にしました。
https://qiita.com/yagiyuki/items/ff343d381d9477e89f3b
回答2件
あなたの回答
tips
プレビュー