我在使用链接到共享库的共享库时遇到问题。我将向您展示我的问题的最小例子。
假设我有A.c
和A.h
,并希望像这样生成libA.so
:
A.H
double test(void);
A.C
#include "A.h"
double test(void) {
return 2.0;
}
编译:{{1}}
现在我想构建一个使用gcc -shared -o libA.so A.c -fPIC
中的libB.so
函数的共享库test()
:
B.c
libA.so
编译:{{1}}
两个编辑都完美无缺。 #include "A.h"
double test123(void) {
return test();
}
显示gcc -shared -o libB.so B.c -fPIC -L. -lA
所以我假设,LD_LIBRARY_PATH=. ldd libB.so
知道它与libA.so => ./libA.so (0xb7778000)
相关联,并知道在哪里查找它。 (我想知道为什么我在这里需要LD_LIBRARY_PATH ...)
但是,libB.so
显示libA.so
,表示符号LD_LIBRARY_PATH=. nm libB.so | c++filt
未定义。
为什么?我做错了什么?为什么U test
无法找到test
的功能?
答案 0 :(得分:0)
为什么在libB.so
中找不到libA.so的功能
因为libA.so
和libB.so
不是同一个文件。
您观察到的结果恰好是正确的和所需的。
如果您希望test()
位于libB.so
,那么您必须将其放在那里。如果您希望它来自libA.so
,那么您已经实现了这一目标。