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();
}