跨平台共享库单例

时间:2018-10-06 18:37:38

标签: c++ gcc singleton shared-libraries mingw

我正在从事跨平台项目(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”文件,使用该文件的项目将抛出一堆与该库相关的“未定义引用”。

在哪里可以找到有关此行为的良好文档?我不只是想要代码解决方案,(我仍然会感激。)我想知道为什么会这样。

0 个答案:

没有答案