2012-01-30 208 views
0

我在使用共享库链接到共享库时遇到问题。我会告诉你我的问题的一个最小例子。将共享库链接到共享库

想,我有A.cA.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中找到?

回答

0

为什么libA.so的功能不libB.so

发现由于libA.solibB.so是不一样的文件。

您观察到的结果正好是正确的所需的之一。

如果你想test()libB.so,那么你必须把它放在那里。如果你想要它来自libA.so,那么你已经实现了这一点。