战魂小筑

讨论群:309800774 知乎关注:http://zhihu.com/people/sunicdavy 开源项目:https://github.com/davyxu

   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  252 随笔 :: 0 文章 :: 506 评论 :: 0 Trackbacks

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

posted on 2010-04-07 16:08 战魂小筑 阅读(2115) 评论(2)  编辑 收藏 引用 所属分类: 游戏开发技术C++/ 编程语言渲染 Shader 引擎

评论

# re: 游戏工程里的使用C++静态库与动态库 2010-04-07 17:02 陈梓瀚(vczh)
如果一个dll不会被多个exe共享,那么唯一的【工程】意义就是避免编译器编译太多代码的时候出现bug。  回复  更多评论
  

# re: 游戏工程里的使用C++静态库与动态库 2010-04-07 22:28 Davy.xu
@陈梓瀚(vczh)
工程的意义在全是静态库时,仅仅只是隔离代码,分割代码块功能而已。现在大型引擎都是这样的  回复  更多评论
  


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理