下一个片段是我在makefile中写的
.cpp.o:
$(CC) $(CFLAGS) $(DEBUGFLAG) $(WARNING) -lshared_lib -c $*.cpp
all: $(LIB_NAME)
$(LIB_NAME) : $(OBJS)
$(rm) $@
$(AR) $@ $(OBJS)
$(RANLIB) $@
答案 0 :(得分:2)
嗯,首先你可以"链接"一个静态的库。您没有使用链接器生成静态库,如上所示,您使用归档程序(ar
)。
由于未链接静态库,因此无法将共享库与其链接。静态库只是一组捆绑的目标文件(您可以将其视为包含目标文件的tar文件,并添加了目录(符号映射)),因此它无法引用共享库
如果您希望静态库使用某些共享库中的函数,则该共享库必须列在链接的程序的链接行上在静态库中。
你的makefile中必须有这样的配方,否则你不会收到有关未定义引用的错误:创建静态库时不会评估引用(ar
命令没有解决所有引用),这样在创建时就不会出错。链接时,链接仅扩展引用。由于我们没有使用makefile的那部分,我们无法就如何修复它提供建议。