我正在从事跨平台项目(Linux-GCC,Windows-Mingw-64)。 在共享库中,我定义了一些单例类,如下所示:
class S {
public:
static S& getInstance() {
static S instance;
return (instance);
}
void setSomething(int i) {
this->i = i;
}
int getSomething() {
return (this->i);
}
private:
S() : i(0) {}
int i;
}
在另一个使用此共享库(其中定义了S)的项目中,我声明以下类。
Class A {
public:
void doSomething() {
s.setSomething(42);
}
private:
S& s = S::getInstance();
}
主要,我使用类A来设置S的“内容”,而S本身来获取“内容”,如下所示:
int main() {
A a;
a.doSomething();
S& s = S::getInstance();
printf("i: %d\n", s.getSomething()); // expected to print 42, but on windows it prints 0
return (0);
}
在Linux上没有问题,但是在Windows上S实例不同。 为什么Windows版本不起作用? 我该如何解决?
编辑(标记为重复):
Cross platform shared library singleton
我在“ getInstance”方法之前添加了“ __declspec(dllexport)”。 (在相关问题中用作DLL_EXPORT,但在任何地方都找不到此声明) 之后,mingw生成一个几乎为空的“ .a”文件,使用该文件的项目将抛出一堆与该库相关的“未定义引用”。
在哪里可以找到有关此行为的良好文档?我不只是想要代码解决方案,(我仍然会感激。)我想知道为什么会这样。