通过可执行文件中的静态对象链接两个共享对

时间:2013-08-04 21:02:12

标签: c++ shared-libraries static-libraries

这似乎是一个非常具体的问题,无论如何都无法在这些页面上找到答案......以下是:

我有一个包含以下内容的静态库:

/** --- libstatic.a / foo.h --- */
struct foo {
...
}
extern "C" CreateFoo();

包含以下内容的共享库

/** libshared_one.so / myFoo.cpp */
#include <foo.h>
struct myFoo {
...
}
extern "C" foo* CreateFoo() {
 return new myFoo;
}

包含此内容的另一个共享库:

/** --- libshared_two.so / foo_factory.cpp */
#include <foo.h>
extern "C" {
    void* new_Foo(...) {
      foo* arg0 = CreateFoo();
      return (void*)arg0;
    }
}

现在,在我的申请中;我静态链接libstatic.a并动态加载(通过dlopen)我的共享对象(dlopen(“libshared_one.so”)/ dlopen(“libshared_two.so)。我期待libshared_two.so的CreateFoo()调用被链接到“强”版。然而,我得到了

undefined symbol: CreateFoo

nm -D ./libshared_two.so表明CreateFoo确实是未定义的,如何让链接器(或特别是dlopen)识别CreateFoo的定义版本?

0 个答案:

没有答案