假设我们有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工程里来做链接。