我制作了一个c++主应用程序,它加载了一个也由我制作的so库。这两个源共享一个共同的头(TestFlags.h)。在TestFlags.h中,我有一个类和一个指针声明,它的目的是对整个应用程序是全局的,即在主应用程序中定义一个实例,并在库函数中使用它。
class TestFlags {
public:
TestFlags() : behaviour(1)
{}
int behaviour;
};
extern __attribute__ ((visibility("default"))) TestFlags * gpTestFlags;然后,为达到指定目标而遵循的一系列执行步骤如下:
似乎由于某种原因,在库中看不到gpTestFlags实例。我拥有的其他静态类也会发生同样的情况,这些值是在库中未见的主应用程序上配置的。
据我所知,这个库似乎为那些声明管理着一个完全不同的内存空间,比如它是否被复制。
发布于 2013-12-17 19:10:25
这是dlopen()预期的工作方式。
这两个模块具有独立的全局符号gpTestFlags。如果你试着把它们连接在一起,链接器就会对重复的链接尖叫。
可以将库中的指针声明为弱指针,也可以使用dlsym()以编程方式解析链接。
https://stackoverflow.com/questions/20641730
复制相似问题