【问题标题】:linking a shared library against a shared library将共享库链接到共享库
【发布时间】:2012-01-30 12:51:57
【问题描述】:

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

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

【问题讨论】:

    标签: linker shared-libraries


    【解决方案1】:

    为什么在libB.so中找不到libA.so的功能

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

    你观察到的结果正是正确期望的结果。

    如果您希望 test() 出现在 libB.so 中,那么您必须把它放在那里。如果您希望它来自libA.so,那么您已经实现了这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-25
      相关资源
      最近更新 更多