- 我尝试制作一个 gnu makefile 来生成静态库,并且我需要共享库中的一些函数,因此我在 makefile 中链接了一个共享库, 但它因未定义的“fooo”引用而失败
- 我还注意到编译日志没有找到 -lshared_lib
下一个片段是我在 makefile 中编写的内容
.cpp.o:
$(CC) $(CFLAGS) $(DEBUGFLAG) $(WARNING) -lshared_lib -c $*.cpp
all: $(LIB_NAME)
$(LIB_NAME) : $(OBJS)
$(rm) $@
$(AR) $@ $(OBJS)
$(RANLIB) $@
最佳答案
首先,你根本无法“链接”静态库。您不使用链接器来生成静态库,正如您在上面看到的,您使用了归档器 (ar
)。
由于静态库未链接,因此无法将共享库与其链接。静态库只是一组捆绑的目标文件(您可以将其视为包含目标文件的 tar 文件,添加了目录(符号映射)),因此它不能引用共享库。
如果您希望静态库使用某些共享库中的函数,则该共享库必须列在链接的程序的link行上在静态库中。
您的 makefile 中必须有这样的配方,否则您不会收到有关 undefined reference 的错误:创建静态库时不会评估引用(ar
命令无法解析所有引用),因此在创建它时不会出现错误。链接时,引用仅由链接器扩展。由于我们没有可用的 makefile 部分,因此我们无法建议您如何修复它。
关于makefile - 可以在 gnu makefile 中对共享库进行静态库链接吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46753020/