0

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

我有一个静态库,其中包含:

/** --- 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 的已定义版本?

4

0 回答 0