来自静态共享库的未定义引用
Undefined reference from shared library in static one
例如,我有 3 个不同的实例:
- 具有未定义引用 "get_object" 和定义的共享库
"x"
- 具有定义的静态库 "get_object"、"y"。
二进制文件 具有未定义引用的目标文件 "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) 手册页中有详细说明。
例如,我有 3 个不同的实例:
- 具有未定义引用 "get_object" 和定义的共享库 "x"
- 具有定义的静态库 "get_object"、"y"。
二进制文件具有未定义引用的目标文件 "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) 手册页中有详细说明。