我理解为什么会发生这种错误,但我不明白我做错了什么。这是我的设置:
我的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 $@
$(PRIMARY_TARGETS): %.o: %.c
$(CC) -c $(foo_CFLAGS) $^ -o $@
$(SECONDARY_TARGETS): %.o: %.c utils_folder/utils.c
$(CC) -c $(foo_CFLAGS) $< -o $@
仅供参考,目标分为主要和次要,因为某些utils.c函数需要在extra.c中引用
这是我得到的错误:
undefined reference to `my_utils_function_1'
我是否以错误的方式接近次要目标?链接器需要知道有关utils.c文件的问题,以便在extra.c中定义/实现缺少的函数吗?
修改
这里是Makefile stacktrace:
| 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
答案 0 :(得分:1)
您没有在PRIMARY或SECONDARY中引用utils.o,因此它们没有链接 -