假設我們有3個工程及其工程類型:
CORE DLL
ENGINE DLL
GAME EXE
D3DRENDER DLL
其中D3DRENDER是GAME動態載入的,其需要鏈接CORE,ENGINE
這是一個很常見的模式,但是不好的是,因為CORE和ENGINE均是DLL,代碼中的Symbol都被導出才可使用。任何人使用DEPENDENCE工具就可以將DLL中引用的東西查看的清楚,雖然這不至于造成技術泄漏,但從速度和DLL大小來說都是不劃算的。
現在很多游戲主exe一般都是10M+甚至20M+的大exe,這都是使用靜態鏈接而成。但是對代碼結構也必須做出一定的調整。所有工程必須都是靜態庫,這樣才能保證像CORE這樣的靜態庫中的全局/靜態變量不至于被鏈接2份而造成內存段邏輯錯誤。
當然,使用全靜態庫還需要注意一點:所有的lib都是在最后的game工程里來做鏈接。