可以对gnu makefile中的共享库进行静态库链接吗


  1. 我试图制作一个gnu makefile来生成一个静态库,我需要共享库中的一些函数,所以我在makefile中链接了一个共享库,但它在未定义引用"fooo"时失败
  2. 我还注意到编译日志找不到-lshared_lib

下一个片段是我在生成文件中写的

.cpp.o: 
$(CC) $(CFLAGS) $(DEBUGFLAG) $(WARNING) -lshared_lib -c $*.cpp
all: $(LIB_NAME)
$(LIB_NAME) : $(OBJS)
$(rm) $@
$(AR) $@ $(OBJS)
$(RANLIB) $@

首先,您根本无法"链接"静态库。您不使用链接器来生成静态库,正如您在上面看到的那样,您使用了归档器(ar)。

由于静态库没有链接,因此您无法将共享库与之链接。静态库只是一组绑定的对象文件(您可以将其视为包含对象文件的tar文件,并添加了目录(符号映射)),因此它不能引用共享库。

如果您希望静态库使用某个共享库中的函数,则该共享库必须列在静态库中链接的程序link行上。

你的makefile中一定有这样一个配方,否则你就不会收到关于未定义引用的错误:创建静态库时不会计算引用(ar命令不会解析所有引用),所以创建它时不会出错。链接时,引用只由链接器展开。由于我们没有makefile的这一部分可供使用,我们无法建议您如何修复它。

最新更新