3
假設我有一個頭文件中的以下一個X.DLL
:多次鏈接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 ----+
在這種情況下,是保證內部A.DLL
和B.DLL
評估時具有相同的值的表達式&foobar
(的foobar
地址)?換句話說,X.DLL
的全局變量存儲了兩次,還是在整個過程中只有一個foobar
實例?另外,如果DLL在加載時或通過調用LoadLibrary
進行鏈接,它會有所作爲嗎?
我也被這句話在GCC的documentation for dllimport困惑:
使用這個屬性一個缺點是,一個指向標爲
dllimport
一個變量不能作爲常量地址。
考慮到我上述的情況,我不太瞭解該陳述的含義。