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

标签 makefile shared-libraries static-libraries

  1. 我尝试制作一个 gnu makefile 来生成静态库,并且我需要共享库中的一些函数,因此我在 makefile 中链接了一个共享库, 但它因未定义的“fooo”引用而失败
  2. 我还注意到编译日志没有找到 -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/

相关文章:

c++ - Visual Studio 2013 将 EXEC 前缀添加到 makefile 输出

linker - CMake:如何生成二进制文件 "as static as possible"

c++ - 如何使用 mingw 编译 cryptopp 5.6.2

c++ - 如何从 C++ 项目静态链接 golang 的 .a 库?

linux - 为什么 chmod 命令不能将 DIR 的内容识别为目录?

makefile - makefile 图灵完整吗?

ios - 将 .xcodeproj 转换为 makefile

java - 在 Jetty Web 服务器中管理共享库

linux - 混合静态库和共享库

c++ - 在 Linux 系统上使用 c++ 链接到共享和静态库