编译OGRE静态库还是相当容易的,因为OGRE 1.4版本本身就有针对VC8的工程,我只要简单的修改配置文件中,采用LIBCMT作为运行库就可以了。除此之外,还需要下载并重新编译所有的第三方依赖库。
编译CEGUI静态库有点麻烦,因为我们已经开始对CEGUI的完全修改,不再考虑升级的问题,所以我修改了代码,取消了原先代码中动态加载Falagard & Widget库的代码,而是通过extern函数声明的方式直接link这两个库中的代码。然后通过宏开关,控制导出函数的声明,使得生成的库合适用于静态链接。
当这两步完成以后,就可以生成采用LIBCMT的工程了,它的好处是不再依赖那个烦人的MSVCRT,給部署带来的方便。而且附带的好处就是发布版本的dll没那么多了。
但是采用静态链接的版本也有以下几个缺点:
- 链接速度实在太慢了,在我的机器上,链接需要1分钟。
- 因为采用静态链接,所以如果一个模块申请内存传递给另一个模块,不会有任何问题,如果将来程序员利用了这点编写出了跨模块传递并释放内存的代码,就使得这个版本不再能够还原为分散DLL方式的工程。
- 如果出现崩溃,难以诊断是哪个模块破坏了内存。
没有评论:
发表评论