将共享库与共享库链接

时间:2012-01-30 12:51:58

标签: linker shared-libraries

我在使用链接到共享库的共享库时遇到问题。我将向您展示我的问题的最小例子。

假设我有A.cA.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的功能?

1 个答案:

答案 0 :(得分:0)

  

为什么在libB.so

中找不到libA.so的功能

因为libA.solibB.so不是同一个文件。

您观察到的结果恰好是正确的所需的

如果您希望test()位于libB.so,那么您必须将其放在那里。如果您希望它来自libA.so,那么您已经实现了这一目标。