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

Undefined reference from shared library in static one

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

  1. 具有未定义引用 "get_object" 和定义的共享库 "x"
  2. 具有定义的静态库 "get_object"、"y"。
  3. 二进制文件 具有未定义引用的目标文件 "x" 和 "y".

当我尝试编译并 link 所有这些东西在一起时,link 人可以解析所有这些符号,我说得对吗?

我主要担心的是符号"get_object"。 link我们能否解决共享库和静态库之间的此类引用?

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

在 Linux 上,如果您 link 一个目标文件 (3) foo.o 带有一个静态库 (2) libee.a 和一个共享库 (1) libyz.so 并且如果您在 link time (i.e. gcc -rdynamic foo.o libee.a libyz.so -o myprog or gcc -rdynamic foo.o -lee -lyz -o myprog) then dynamic linker 传递 -rdynamic 将在动态 link 时间解析 get_object 名称(在 ld-linux.so

ELF wikipage and Drepper's paper: How To Write Shared Libraries. Read also Levine's book: Linkers and loaders & ld(1) 手册页中有详细说明。