我有三个c文件及其头文件:
program
取决于lib1.o
,这取决于lib2.o
。 program
并不直接依赖lib2.o
。
program.main()
调用lib1.func1()
,调用lib2.func2()
。
我有两个Makefile
个;一个在主文件夹中,另一个在lib中。
LIB /生成文件:
all: lib1.o lib2.o
lib1.o: lib2.o lib2.h lib1.h
lib2.o: lib2.h
主要/生成文件:
VPATH=../lib
all: program
program: program.o lib1.o lib1.h
$(CC) $(CFLAGS) -o $@ $^
当我运行make -C main all
时,出现undefined reference to 'func2'
错误。两个lib
目标文件都编译得很好。
我是否需要使lib2
成为program
的依赖关系,即使它没有直接调用它?
答案 0 :(得分:1)
是。 lib1.o包含对仅存在于lib2.o中的函数的引用。如果你没有告诉链接器main也链接lib2.o它将永远不会找到它。编译器在编译时不解析从lib1到lib2的引用,它只检查头以确保正确调用它。
你可以让lib目录Makefile构建一个.a(man ar),其中包含两个.o文件,然后链接到你的主构建中的.a文件。