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

时间:2017-10-15 08:08:22

标签: makefile shared-libraries static-libraries

  1. 我尝试创建一个gnu makefile来生成一个静态库,我需要一个共享库中的函数,所以我链接了一个makefile中的共享库, 但它对未定义的引用“fooo”
  2. 失败了
  3. 我还注意到编译日志找不到-lshared_lib
  4. 下一个片段是我在makefile中写的

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

1 个答案:

答案 0 :(得分:2)

嗯,首先你可以"链接"一个静态的库。您没有使用链接器生成静态库,如上所示,您使用归档程序(ar)。

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

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

你的makefile中必须有这样的配方,否则你不会收到有关未定义引用的错误:创建静态库时不会评估引用(ar命令没有解决所有引用),这样在创建时就不会出错。链接时,链接仅扩展引用。由于我们没有使用makefile的那部分,我们无法就如何修复它提供建议。