来自静态库中共享库的未定义引用

时间:2015-08-21 13:09:29

标签: gcc linker

例如,我有3个不同的实例:

  1. 具有未定义引用“get_object”和定义的共享库 “X”
  2. 定义为“get_object”,“y”。
  3. 的静态库
  4. 二进制文件具有未定义引用“x”和“y”的对象文件。
  5. 我是否正确,当我尝试编译并将所有这些内容链接在一起时,链接器可以解析所有这些符号?

    我担心的主要问题是符号“get_object”。 链接器可以解析共享库和静态库之间的这种引用吗?

1 个答案:

答案 0 :(得分:2)

静态库只是目标文件(其成员)的集合,可能带有ranlib(1)生成的索引。

在Linux上,如果将目标文件(3)foo.o与静态库(2)libee.a和共享库(1)libyz.so链接,并且传递{{ 1}}在link时间(即-rdynamicgcc -rdynamic foo.o libee.a libyz.so -o myprog),然后dynamic linker会在动态链接时解析gcc -rdynamic foo.o -lee -lyz -o myprog名称(get_object

详情在ELF wikipage和Drepper的论文中解释:How To Write Shared Libraries。另请阅读Levine的书:Linkers and loaders& ld(1)手册页。