假设我有这种文件夹层次结构:
main
dir1
file1.cpp/h
file2.cpp/h
makefile
dir2
file3.cpp/h
makefile
makefile
现在,每个内部makefile都将文件编译为目标文件并创建静态库(* .a)
我想从这些静态库构建一个共享对象(动态库)(让我们称之为 libdir1.a,libdir2.a )
我在makefile上尝试了这条规则,但我接受了这个错误:
CC = g++
LDFLAGS = -shared
TARGET = libprog.so
$(TARGET): file1.o file2.o file3.o
$(CC) $(LDFLAGS) -o $@ -Wl,-whole-archive -ldir1 -ldir2 -Wl,-no-whole-archive
(compiler output)
libdir2.a: member libdir2.a(file1.h) in archive is not an object
我不知道错误是源于错误构建存档还是因为makefile的目标规则错误。
每个档案都是使用此规则构建的:
$(TARGET): [list_of_obj_files_that_were_created_on_this_dir]
ar -r -o $@ $^
答案 0 :(得分:0)
问题是我不小心将“h”文件包含在存档中。这是因为我使用了一个变量来存储目标文件,但是我没有很好地将数据放在上面,所以我认为变量只包含.o文件,但实际上它也有.h文件。