静态库与动态库中的符号解析
Symbol resolution in static vs dynamic libraries
有一个自由软件项目,它构建了一些静态c++库,然后将它们链接以生成二进制文件。我想把图书馆分成.so文件用于动态链接(因此其他项目可能会使用lib)。一个库构建得很好,但当我尝试链接时它,我得到"未定义的引用"错误。
这些很容易追踪和修复(代码引用了方法,但相应的.cc文件不是包含在Makefile编译命令中)。然而,我,想知道为什么一般情况下,图书馆会可以作为静态库,但不能作为动态库。什么是g++和ld在一种情况下做而不是在另一种情况?
非常感谢。
静态库只是一堆对象文件ar是一个非常简单的归档器。链接时没有解析依赖项,请参阅ar的手册页。
另一方面,共享对象或您所称的动态库是一个非常不同的野兽。它们实现ELF二进制格式,并具有复杂的规则集。它们还有初始化代码,一些依赖关系在链接时得到解决。看见http://www.akkadia.org/drepper/dsohowto.pdf和http://www.akkadia.org/drepper/goodpractice.pdf以便进行更深入的介绍。
但当我尝试链接它时,我会得到"未定义引用"错误。
向我们展示您的链接命令。链接共享库时,通常不会出现"未定义引用"错误,因为共享库允许(默认情况下)具有未解析的符号。
或者您的意思是,当您将最终可执行文件链接到共享库时,会出现"未定义引用"错误?
相关文章:
- 如何动态加载和调用具有特定于库的类型作为函数参数的符号
- 动态库没有静态库文件的符号
- "typeinfo"未从动态库中导出的符号
- 在C++中声明多维浮点或无符号动态数组
- 与 dlopen 的动态链接:找不到符号
- 在静态库中导出符号,该符号链接到动态库
- __xstat 64 位上的动态符号解析错误
- 动态链接到 c++ 静态成员字段时符号查找失败
- G 自定义动态库链接错误未定义符号
- 在 Mac 上编译动态库:ld:找不到用于架构x86_64的符号
- 动态创建字节数组后,监视中的符号数量意外
- 静态库中未定义的符号链接到动态库
- 动态加载共享库时出现未定义的符号错误
- 当动态库使用静态库的符号时,从静态库打开动态库
- 静态库与动态库中的符号解析
- 是否可以不让我的可执行文件中的符号可用于动态打开的库
- 动态加载使用--wrap=malloc编译的库时未解析的符号__real_malloc
- 操纵动态库加载的符号解析顺序
- 使用LLVM的可执行文件的动态符号解析
- linux上动态链接期间符号的替代实现