【发布时间】:2012-01-30 12:51:57
【问题描述】:
我在使用与共享库链接的共享库时遇到问题。我将向您展示我的问题的一个最小示例。
假设,我有A.c 和A.h 并想像这样生成libA.so:
啊.h
double test(void);
交流
#include "A.h"
double test(void) {
return 2.0;
}
编译:gcc -shared -o libA.so A.c -fPIC
现在我想构建一个共享库libB.so,它使用来自libA.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中找不到?
【问题讨论】: