OSG静态编译 (转)

搞了大半天,终于用静态编译的方式把OSG核心库、IVE插件和一个sample程序编译成功了,期间遇到一些问题,在此记录下来。

1.OSG的CMake工程支持使用动态链接和静态链接两种方式编译OSG库, 所使用的两个开关是DYNAMIC_OPENSCENEGRAPH和DYNAMIC_OPENTHREADS,如下图:

要想静态编译OSG库,首先需要确保这两个开关不被勾选。

2.配置好CMake工程,生成VC工程后,需要对工程配置做一些手动修改。

1)修改所有工程的配置类型(Configuration Type)为静态库(Static Library (.lib)),这一步CMake已经做了。

2)修改所有工程的运行时库(Runtime Library)为MT或MTd。

3)要想正确编译OSG静态库工程,必须在工程中加入两个预编译宏:OSG_LIBRARY_STATICOT_LIBRARY_STATIC,一般前者已经被自动添加了,而后者则需要手动添加。在工程配置的C/C++ ->Preprocessor中的Preprocessor Definitions中添加即可。(我就是一开始没有添加OT_LIBRARY_STATIC宏,导致一大堆关于OpenThreads库中对象的链接错误)

3.可以直接编译OSG自带的静态库例子程序-osgstaticviewer,也可以自己写一个简单的osg程序编译,自己写程序时需要注意:

如果使用窗口系统,需要添加USE_GRAPHICSWINDOW()宏。

如果使用某个OSG插件,需要添加对应插件的USE_OSGPLUGIN(plugin name)

一切搞定,就可以运行你的程序而不用担心一大堆的依赖库找不到了。而静态链接的exe文件,并没有想象中的大,因为它只包含了需要的程序,而不是简单的是所有lib文件的总和。

另外,一个需要特别注意的问题是,如果使用静态编译的OSG库,需要首先保证所有插件依赖库(如zip、curl、freetype等)都是静态链接库。

 

http://king8010.popo.blog.163.com/blog/static/1088321320106283568982/

posted on 2012-04-18 20:03  3D入魔  阅读(1628)  评论(0编辑  收藏  举报