OSG笔记一:在Win7、VS2010下配置OSG3.4
在配置OSG初期找了很多相关的博文,内容都大同小异,且总与现在最新的版本有些出入,偏偏OSG这家伙编译一次的时间总是很长(有时候需要四、五个小时),失败了就很伤。在配置了不知道多少遍之后终于探索出了一个较为稳定的方案,作为本人的第一篇原创文章与大家分享。
一、相关平台与材料:
- Window7 64位 旗舰版 与 Visual Studio 2010
- cmake - 跨平台编译工具,自行搜索下载
- OSG稳定版源码:OpenSceneGraph-3.4.0.zip
- OSG第三方库:3rdParty_VC10_x86_x64.zip(这里需要注意的是对应的VS2010下32&64版本的不能下载,只能下载到32&64(部分)版本的)
- OSG标准测试数据资源:OpenSceneGraph-Data-3.0.0.zip
以上OSG相关的资源来自www.osgchina.org,这是OpenSceneGraph中文官方网站。
二、CMake生成工程文件
首先将下载到的资源进行一定的整理:
在任意位置新建一个文件夹,此处以D:\OpenSceneGraph为例,将OSG源码、OSG第三方库分别解压缩,并将第三方库文件夹改名为3rdParty,另外新建一个空文件夹build,如下图:-
在CMake中配置OSG工程(这步是重点,决定后期编译成败的关键在CMake的配置上):
打开cmake-gui,将OpengSceneGraph-3.4.0文件夹中的CMakeLists.txt拖到Cmake中
Cmake允许两种生成方式:源码树内生成(in-source build)和源码树外生成(out-of-source build)。前者是我们把CMakefile.txt拖入Cmake-gui之后默认的模式。为了便于管理,我们采用第二种方式,将工程文件和源码分开,将工程文件放在我们新建的build文件夹中。将“Where to build the binaries”设置成build文件夹所在的路径,而后点击Configure。第一次Configure会弹出如下对话框,直接Finish即可。
之后会进行第一次配置,如果遇到“转换到COFF期间失败”问题,找到你VS2010安装目录下的VC->bin中的cvtres.exe,把它重命名,例如我的做法是cvtres[backup].exe。具体原因自行百度COFF和LNK1123。在第一次配置之后,我们和其他教程一样先把 BUILD_OSG_EXAMPLES 选上,单击一次Configure,再把BUILD_MFC_EXAMPLES选上,再单击一次Configure。
-
然后着重关注另两个参数:ACTUAL_3RDPARTY_DIR 和 CMAKE_INSTALL_PREFIX*。
-
ACTUAL_3RDPARTY_DIR 是第三方库的地址。如果你下面的配置结果中有许多Could NOT find xxxxxx (missing……),就是这里出了问题。这里我们打开3rdParty文件夹会发现里面有x64和x86两个文件夹,分别对应64位和32位的第三方库,这里我们使用x86(因为普遍反映64位的不稳定)
-
CMAKE_INSTALL_PREFIX* 是对VS工程的编译结果安装路径的设置,不是必选项,涉及到我们编译成功之后的操作,简单的说就是我们编译完成之后得到了bin、include和lib,你可以让VS2010直接安装到指定的路径下,也可以手动复制这些文件到你想要放的地方。(比如我准备让它安装到D盘的Program Files->OpenSceneGraph文件夹下)
-
ACTUAL_3RDPARTY_DIR 是第三方库的地址。如果你下面的配置结果中有许多Could NOT find xxxxxx (missing……),就是这里出了问题。这里我们打开3rdParty文件夹会发现里面有x64和x86两个文件夹,分别对应64位和32位的第三方库,这里我们使用x86(因为普遍反映64位的不稳定)
-
Configure之后检查下面的配置结果信息,发现出来几个Warning还有Could NOT find,其中有些是真的没有,但还有几个文件是需要手动添加的。这里我们主要要确保CURL、Freetype、GDAL、GLUT、JPEG、LIBXML2、Tiff、ZLIB这几个库能用。这里需要你去3rdParty文件夹中去确认相关文件,如果你下的是最新的文件,可以参照如下配置。
- 先把Grouped和Advanced选上,再找到FREETYPE,把FREETYPE_LIBRARY_DEBUG设为freetype2311MT_D.lib的路径
- 再找到libxml2,这里我发现3rdParty/x86中的libxml和modules都与libxml2有关,我的做法是将modules中的3个文件复制到libxml文件夹中
再将LIBXML2_INCLUDE_DIR设成libxml的路径
能看到下面LIBXML2多出了版本信息:
- 还有一个很重要的点是zlib库。后期最经常出错的是osgDB的链接问题,病因就在这。这里ZLIB_LIBRARY和ZLIB_LIBRARY_DEBUG都需要的是静态版,也就是zlibstatic.lib和zlibstaticd.lib。
- 先把Grouped和Advanced选上,再找到FREETYPE,把FREETYPE_LIBRARY_DEBUG设为freetype2311MT_D.lib的路径
- 最后,我们找到WIN32,可以把WIN32_USE_MP*选上,这允许使用多线程,能使编译速度加快,但同时会让你的CPU满负荷运作,这段时间电脑连弹出U盘操作都执行不了。如果不想这样就不用选上。
最后一次Configure之后,Generate。
三、VS2010编译源码并安装
在build中打开sln工程,在菜单栏的“生成”->“批生成”中选择ALL_BUILD的类型进行生成,这里开了多线程的话大概只要2-3小时,
全部成功之后再点进“批生成”,把ALL_BUILD的去掉,选择INSTALL中与之前相应的类型生成(这步不是必须项,也可以直接对上一步生成的bin、include、lib文件夹配置环境变量),
生成成功之后你会在之前“二-4”设置的目录下看到编译好的OSG。
四、配置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上,具体可以参考这篇博文。