构建C动态共享库提供未定义的符号

时间:2017-06-06 10:29:36

标签: c gcc shared-libraries dynamic-library

为什么构建静态库(.a)不会出现任何错误并且无法正常工作:

$(LIBRARY): assertion.o
    $(AR) $(OUTPUT_STATIC_LIB_DIR)/$(LIBRARY) $(OUTPUT_DIR)/assertion.o

同时,构建共享库(.so)时会出现这样的错误:

$(SHARED_LIBRARY): assertion.o
    $(CC) $(CFLAGS) -shared -o $(OUTPUT_LIB_DIR)/$(SHARED_LIBRARY) $(OUTPUT_DIR)/assertion.o

错误讯息:

Undefined symbols for architecture x86_64:
  "_float_cmp_func", referenced from:

1 个答案:

答案 0 :(得分:0)

您的库的代码确实引用了" _float_cmp_func",这需要在运行时找到。

但是静态库不应该是一个足够的二进制模块,它只是目标代码的集合,旨在包含在以后的构建/链接步骤中(与其他目标代码和库一起)。

相比之下,共享库已经准备好了#34;二进制模块,因此它的依赖关系应该在链接阶段解决。因此,在这种情况下,您应该在链接步骤中添加一些模块,其中" _float_cmp_func"已实施