我遇到了一些情況,其中一些依賴代碼是一個靜態庫。靜態或全局通過鏈接的多個實例
我們稱之爲靜態庫「A」。 我做了一個DLL「B」,它鏈接到「A」。 可執行文件「C」鏈接到兩者。
I think this diagram is correct:
A static lib
/\
| B dll
\ \
\---C executable
「A」包含使用全局變量的記錄器類。這是你公司的一個手,你看着它,並對自己說:「哦,廢話什麼爛攤子。」
看來,「A」中的這些全局變量具有不同的地址,具體取決於我是在單步執行可執行模塊中的代碼還是單步執行dll模塊中的代碼。
這當然會使記錄器以意想不到的方式工作。
我假設靜態庫被複制一次到dll中,一次進入可執行文件,因此實際上是所有靜態和全局變量的2個副本。那是對的嗎?
問題的第二部分是,將使該記錄器成爲Meyer的單例解決問題,還是將靜態方法範圍內的不同地址也取決於我調用哪個模塊?
或者,是正確的做法,使所有50個項目動態鏈接,如果一個動態鏈接?
@descherjm是的。它們都是Visual Studio 2015中相同解決方案的一部分。該解決方案有一個可執行文件,所有文件都鏈接到該文件中。 –
你可以把全局變量放在一個dll中嗎? – drescherjm
@dresherjm沒有任何時間我的上司會滿意。 –