我明白爲什麼會出現這個錯誤,但我不明白我做錯了什麼。這裏是我的設置:Makefile undefined reference
- extra.c:包含一些輔助函數定義
- extra.h:包含原型&包括extra.c
- foo.c的:我的主要程序,進口utils.h
我的Makefile文件如下:
CC=gcc
foo_CFLAGS=-Wall
all: foo
clean:
rm -f foo *.o
install:
install -m 0755 foo /bin
PRIMARY_TARGETS = foo.o other_stuff.o more_stuff.o
SECONDARY_TARGETS = extra.o
foo: $(PRIMARY_TARGETS) $(SECONDARY_TARGETS)
$(CC) $(foo_CFLAGS) $^ -o [email protected]
$(PRIMARY_TARGETS): %.o: %.c
$(CC) -c $(foo_CFLAGS) $^ -o [email protected]
$(SECONDARY_TARGETS): %.o: %.c utils_folder/utils.c
$(CC) -c $(foo_CFLAGS) $< -o [email protected]
僅供參考目標被分割進入主要和次要,因爲一些utils.c功能需要在extra.c
這裏引用年代的錯誤我得到:
undefined reference to `my_utils_function_1'
難道我接近二級指標的一部分走錯了路?鏈接器不需要知道該utils.c文件的問題,以便在extra.c中定義/實現缺少的函數?
編輯
這裏的Makefile文件堆棧跟蹤:
| foo.o: In function `foo_init':
| /home/build/foo.c:33: undefined reference to `my_utils_function_1'
| collect2: error: ld returned 1 exit status
| Makefile:17: recipe for target 'foo' failed
| make: *** [foo] Error 1
或者你沒有代碼'my_utils_function_1',只定義了它的原型。你能告訴我們一個函數定義的片段嗎?你可以發佈一個makefile完整執行的跟蹤(實際上是鏈接步驟) –
我做了,我目前正在查看它。問題是我不能發佈實際的代碼(你可以從我的描述中得知),因爲這是一個工作項目。我更加想知道我的方法學是否存在固有的錯誤。當然是 – Niko
!發佈makefile執行痕跡,並只是你的函數的定義(在.c文件中)。不會泄露任何機密代碼。 –