我制作了一个c ++主要的应用程序,它加载了一个由我制作的库。 两个源共享一个公共头(TestFlags.h)。 在TestFlags.h中,我有一个类和一个指针声明,它是整个应用程序的全局,它在主应用程序中定义一个实例并在库函数中使用它。
class TestFlags {
public:
TestFlags() : behaviour(1)
{}
int behaviour;
};
extern __attribute__ ((visibility("default"))) TestFlags * gpTestFlags;
然后达到命名目标的一系列执行步骤是:
似乎库内的gpTestFlags实例由于某种原因未被看到。 同样的事情也发生在我拥有的其他静态类中,在主应用程序中配置的值在库中没有看到。
到目前为止,我可以研究一下,这个库似乎为那些声明管理了一个完全不同的内存空间,比如它是否重复。
答案 0 :(得分:1)
这是dlopen()的预期方式。
这两个模块具有称为 gpTestFlags 的独立全局符号。如果您尝试将它们链接在一起,链接器会尖叫重复。
您可以将库中的指针声明为弱,或者您可以使用dlsym()以编程方式解析链接。