Linker 将共享库与共享库链接

Linker 将共享库与共享库链接,linker,shared-libraries,Linker,Shared Libraries,我在使用与共享库链接的共享库时遇到问题。我将向您展示我的问题的一个最小示例 假设我有A.c和A.h,并且想要生成libA。所以像这样: A.h 交流 编译:gcc-shared-o libA.so A.c-fPIC 现在我想构建一个共享库libB.so,它使用libA.so中的函数test(): 不列颠哥伦比亚省 汇编:gcc-shared-o libB.so B.c-fPIC-L-lA 两种汇编都能完美地工作LD_库_路径=。ldd libB.so显示libA.so=>。/libA.so(0x

我在使用与共享库链接的共享库时遇到问题。我将向您展示我的问题的一个最小示例

假设我有
A.c
A.h
,并且想要生成
libA。所以像这样:

A.h

交流

编译:
gcc-shared-o libA.so A.c-fPIC

现在我想构建一个共享库
libB.so
,它使用
libA.so中的函数
test()

不列颠哥伦比亚省

汇编:
gcc-shared-o libB.so B.c-fPIC-L-lA

两种汇编都能完美地工作<代码>LD_库_路径=。ldd libB.so
显示
libA.so=>。/libA.so(0xb7778000)
因此我假设
libB.so
知道它是与
libA.so链接的,并且知道在哪里查找它。(我想知道为什么我需要这里的LD_LIBRARY_PATH…)
但是,
LD\u LIBRARY\u PATH=。nm libB.so | c++filt
显示
U test
,表示符号
test
未定义

为什么?我做错了什么?为什么在
libB.so
中找不到
libA.so
的函数

为什么libB.so中找不到libA.so的函数

因为
libA.so
libB.so
不是同一个文件

你观察到的结果正是正确和期望的结果

如果希望
test()
位于
libB.so
中,则必须将其放在那里。如果您希望它来自
libA.so
,那么您已经实现了这一点

double test(void);
#include "A.h"

double test(void) {
    return 2.0;
}
#include "A.h"

double test123(void) {
    return test();
}