c - 构建 C 动态共享库给出 undefined symbol

标签 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:

最佳答案

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

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

相比之下,共享库是“随时可用”的二进制模块,因此应在链接阶段解决其依赖关系。因此,在这种情况下,您应该在链接步骤中添加一些实现“_float_cmp_func”的模块

关于c - 构建 C 动态共享库给出 undefined symbol ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44387575/

相关文章:

c++ - 版本号、次要号和发布号之间的区别

c - 为什么 ld 在将可执行文件与 a 链接时需要 -rpath-link 以便需要另一个 so ?

c++ - 动态链接库的问题

c++ - 使用 Oculus SDK 渲染时出现黑屏

c++ - GNUMakefile 和 gcc : resolving the order of conflicting "-std=c++" requirements

c - 如何在 ANSI C 中定义 NaN 值?

c - c/c++ 中的 gcc 编译器是否保证将指向 const 数据的全局 const 指针放置在单独的只读部分中?

bash - 尝试执行 'as' : execvp: No such file or directory 时出错

c - 在输出文件中添加 0 在控制台中不可见

c - 将矩阵传递给函数后出现段错误