我明白为什么会出现这个错误,但我不明白我做错了什么。这里是我的设置: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文件中)。不会泄露任何机密代码。 –