假设我有一个头文件中包含以下内容的 X.DLL
:
extern __declspec(dllexport) int foobar;
此foobar
全局变量然后在实现文件的X.DLL
中定义:
int foobar = 1;
现在假设我有两个 DLL,A.DLL
和 B.DLL
,它们链接到 X.DLL
,还有一个使用 A.DLL
和 B.DLL
的应用程序 E.EXE
:
+----> A.DLL ----+
| |
E.EXE ----+ +----> X.DLL
| |
+----> B.DLL ----+
在这种情况下,表达式 &foobar
(foobar
的地址)是否保证在 A.DLL
中求值时具有相同的值,并且B.DLL
?也就是说,X.DLL
的全局变量是存储了两次还是整个过程中只有一个foobar
的实例?此外,如果 DLL 在加载时或通过调用 LoadLibrary
链接,是否会有所不同? ?
我也对 GCC 的 documentation for dllimport 中的这个声明感到困惑:
One drawback to using this attribute is that a pointer to a variable marked as
dllimport
cannot be used as a constant address.
考虑到我的上述情况,我不太理解该声明的含义。
最佳答案
只有一份。但是,一般来说,这样做是一个非常糟糕的主意,您会遇到很多问题。
关于c++ - 当多次链接 DLL 时,导出的全局变量会发生什么情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6520487/