这似乎是一个非常具体的问题,无论如何都无法在这些页面上找到答案......这里是:
我有一个静态库,其中包含:
/** --- 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 的已定义版本?