OSG笔记一:在Win7、VS2010下配置OSG3.4

在配置OSG初期找了很多相关的博文,内容都大同小异,且总与现在最新的版本有些出入,偏偏OSG这家伙编译一次的时间总是很长(有时候需要四、五个小时),失败了就很伤。在配置了不知道多少遍之后终于探索出了一个较为稳定的方案,作为本人的第一篇原创文章与大家分享。

一、相关平台与材料:

二、CMake生成工程文件

  • 首先将下载到的资源进行一定的整理:
    在任意位置新建一个文件夹,此处以D:\OpenSceneGraph为例,将OSG源码、OSG第三方库分别解压缩,并将第三方库文件夹改名为3rdParty,另外新建一个空文件夹build,如下图:
    OSG笔记一:在Win7、VS2010下配置OSG3.4

  • 在CMake中配置OSG工程(这步是重点,决定后期编译成败的关键在CMake的配置上)

    1. 打开cmake-gui,将OpengSceneGraph-3.4.0文件夹中的CMakeLists.txt拖到Cmake中
      OSG笔记一:在Win7、VS2010下配置OSG3.4

    2. Cmake允许两种生成方式:源码树内生成(in-source build)和源码树外生成(out-of-source build)。前者是我们把CMakefile.txt拖入Cmake-gui之后默认的模式。为了便于管理,我们采用第二种方式,将工程文件和源码分开,将工程文件放在我们新建的build文件夹中。将“Where to build the binaries”设置成build文件夹所在的路径,而后点击Configure。第一次Configure会弹出如下对话框,直接Finish即可。
      OSG笔记一:在Win7、VS2010下配置OSG3.4
      OSG笔记一:在Win7、VS2010下配置OSG3.4
      之后会进行第一次配置,如果遇到“转换到COFF期间失败”问题,找到你VS2010安装目录下的VC->bin中的cvtres.exe,把它重命名,例如我的做法是cvtres[backup].exe。具体原因自行百度COFF和LNK1123。

    3. 在第一次配置之后,我们和其他教程一样先把 BUILD_OSG_EXAMPLES 选上,单击一次Configure,再把BUILD_MFC_EXAMPLES选上,再单击一次Configure。
      OSG笔记一:在Win7、VS2010下配置OSG3.4

    4. 然后着重关注另两个参数:ACTUAL_3RDPARTY_DIRCMAKE_INSTALL_PREFIX*

      • ACTUAL_3RDPARTY_DIR 是第三方库的地址。如果你下面的配置结果中有许多Could NOT find xxxxxx (missing……),就是这里出了问题。这里我们打开3rdParty文件夹会发现里面有x64和x86两个文件夹,分别对应64位和32位的第三方库,这里我们使用x86(因为普遍反映64位的不稳定)
        OSG笔记一:在Win7、VS2010下配置OSG3.4
      • CMAKE_INSTALL_PREFIX* 是对VS工程的编译结果安装路径的设置,不是必选项,涉及到我们编译成功之后的操作,简单的说就是我们编译完成之后得到了bin、include和lib,你可以让VS2010直接安装到指定的路径下,也可以手动复制这些文件到你想要放的地方。(比如我准备让它安装到D盘的Program Files->OpenSceneGraph文件夹下)
        OSG笔记一:在Win7、VS2010下配置OSG3.4
    5. Configure之后检查下面的配置结果信息,发现出来几个Warning还有Could NOT find,其中有些是真的没有,但还有几个文件是需要手动添加的。这里我们主要要确保CURL、Freetype、GDAL、GLUT、JPEG、LIBXML2、Tiff、ZLIB这几个库能用。这里需要你去3rdParty文件夹中去确认相关文件,如果你下的是最新的文件,可以参照如下配置。

      • 先把GroupedAdvanced选上,再找到FREETYPE,把FREETYPE_LIBRARY_DEBUG设为freetype2311MT_D.lib的路径
        OSG笔记一:在Win7、VS2010下配置OSG3.4
      • 再找到libxml2,这里我发现3rdParty/x86中的libxml和modules都与libxml2有关,我的做法是将modules中的3个文件复制到libxml文件夹中
        OSG笔记一:在Win7、VS2010下配置OSG3.4
        再将LIBXML2_INCLUDE_DIR设成libxml的路径
        OSG笔记一:在Win7、VS2010下配置OSG3.4
        能看到下面LIBXML2多出了版本信息:
        OSG笔记一:在Win7、VS2010下配置OSG3.4
      • 还有一个很重要的点是zlib库。后期最经常出错的是osgDB的链接问题,病因就在这。这里ZLIB_LIBRARY和ZLIB_LIBRARY_DEBUG都需要的是静态版,也就是zlibstatic.lib和zlibstaticd.lib。
    6. 最后,我们找到WIN32,可以把WIN32_USE_MP*选上,这允许使用多线程,能使编译速度加快,但同时会让你的CPU满负荷运作,这段时间电脑连弹出U盘操作都执行不了。如果不想这样就不用选上。
      OSG笔记一:在Win7、VS2010下配置OSG3.4
      最后一次Configure之后,Generate。
      OSG笔记一:在Win7、VS2010下配置OSG3.4

三、VS2010编译源码并安装

在build中打开sln工程,在菜单栏的“生成”->“批生成”中选择ALL_BUILD的类型进行生成,这里开了多线程的话大概只要2-3小时,
OSG笔记一:在Win7、VS2010下配置OSG3.4
全部成功之后再点进“批生成”,把ALL_BUILD的去掉,选择INSTALL中与之前相应的类型生成(这步不是必须项,也可以直接对上一步生成的bin、include、lib文件夹配置环境变量),
OSG笔记一:在Win7、VS2010下配置OSG3.4
生成成功之后你会在之前“二-4”设置的目录下看到编译好的OSG。
OSG笔记一:在Win7、VS2010下配置OSG3.4

四、配置OSG环境并测试

环境变量->系统变量->Path中添加D:\Program Files\OpenSceneGraph\bin;(;是分隔符)和D:\Program Files\OpenSceneGraph\share\bin;
环境变量->系统变量中新建OSG_FILE_PATH,值为 之前下载的OpenSceneGraph-Data-3.0.0.zip解压之后的文件路径
还可以在环境变量->系统变量中新建OSG_ROOT,值为OSG的安装目录,即D:\Program Files\OpenSceneGraph,不过这个好像没什么用,只是书上提到,可以不理会。
此处还可以参考osgChina中的相关网页

在cmd中分别输入 osgversion、osglogo、osgviewer cow.osg(注意中间空格) 查看结果。

最后在VS2010中创建工程进行测试,请另行查找相关博文,此处不再赘述。在调试OSG程序的时候还容易遇到gl.h出错的问题,解决方法是在代码最前面把 Windows.h include上,具体可以参考这篇博文