我在使用共享库链接到共享库时遇到问题。我会告诉你我的问题的一个最小例子。将共享库链接到共享库
想,我有A.c
和A.h
并希望产生libA.so
这样的:
啊
double test(void);
AC
#include "A.h"
double test(void) {
return 2.0;
}
编译:gcc -shared -o libA.so A.c -fPIC
现在我想从libA.so
构建一个共享库libB.so
使用该功能test()
:
B.c
#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)
所以我认为,libB.so
知道它被链接到libA.so
,并知道在哪里寻找它。 (我想知道为什么我需要LD_LIBRARY_PATH在这里...) 但LD_LIBRARY_PATH=. nm libB.so | c++filt
显示为U test
,表示符号test
未定义。
怎么回事?我做错了什么?为什么libA.so
的功能不能在libB.so
中找到?