【问题标题】:What happens to exported global variables when a DLL is linked in multiple times?当一个 DLL 被多次链接时,导出的全局变量会发生什么?
【发布时间】:2011-06-29 12:16:37
【问题描述】:

假设我有一个X.DLL,头文件中有以下内容:

extern __declspec(dllexport) int foobar;

这个foobar 全局变量随后在一个实现文件的X.DLL 中定义:

int foobar = 1;

现在假设我有两个 DLL,A.DLLB.DLL,它们链接到 X.DLL,以及一个使用 A.DLLB.DLL 的应用程序 E.EXE

          +----> A.DLL ----+
          |                |
E.EXE ----+                +----> X.DLL
          |                |
          +----> B.DLL ----+

在这种情况下,表达式&foobarfoobar 的地址)在A.DLLB.DLL 内部计算时是否保证具有相同的值?也就是说X.DLL的全局变量是存储了两次还是整个过程中只有一个foobar的实例?此外,如果在加载时链接 DLL 或通过调用 LoadLibrary 链接 DLL,是否会有所不同?

我也对 GCC 的 documentation for dllimport 中的这句话感到困惑:

使用此属性的一个缺点是指向标记为dllimport变量的指针不能用作常量地址。

考虑到我前面提到的情况,我不太明白该声明的含义。

【问题讨论】:

    标签: c++ c windows dll


    【解决方案1】:

    只有一份。但是,总的来说,这样做是一个非常糟糕的主意,您会遇到很多问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-05
      • 2017-09-07
      • 2022-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多